2014-03-28 37 views
0

我有一个存储一些信息的数组。Array.IndexOf 2个匹配值c#

我搜索这个数组使用此代码的第一列匹配:

int i = Array.IndexOf(ARRAY, ARRAY.Where(x => x.Contains(VALUE)).FirstOrDefault()); 

但我想要做的是找到的第一个值和第二个值相匹配的索引。

像这样的东西(如果是有道理的):

int i = Array.IndexOf(ARRAY, ARRAY.Where(x => x.Contains(VALUE1)).FirstOrDefault() && Contains(VALUE2)).Second()); 

编辑要求:

static void Main(string[] args) 
{ 
    //get states 
    Console.WriteLine("state1"); 
    string state1 = Console.ReadLine(); 
    Console.WriteLine("state2"); 
    string state2 = Console.ReadLine(); 

    //read from csv 
    String[] statearray = File.ReadAllLines(@"C:\Test\States.csv"); 
    var query = from line in statearray 
       let data = line.Split(',') 
       select new 
       { 
        Start = data[0], 
        Finish = data[1], 
        StatesCrossed = data[2], 
       }; 

    //get index 
    int i = Array.IndexOf(statearray, statearray.Where(x => x.Contains(state1)).FirstOrDefault()); 

    Console.ReadLine(); 
} 

state 1state 2 ="NSW" 并在csv的格式为:

NSW, NSW, 1 
NSW, VIC, 2 
+0

你能分享一些样品的输入和输出吗?这将有助于澄清您的要求。 –

+0

你真的应该使用一个正确的CSV阅读器。 –

回答

1

示例代码

int index = query.Select((v, i) => new { Value = v, Index = i + 1 }) 
       .Where(p => p.Value.Start == state1 && p.Value.Finish == state2) 
       .Select(p => p.Index) 
       .FirstOrDefault() - 1; 

但你也需要修剪你的元素:

var query = from line in statearray 
      let data = line.Split(',') 
      select new 
      { 
       Start = data[0].Trim(), 
       Finish = data[1].Trim(), 
       StatesCrossed = data[2].Trim(), 
      }; 
+0

你是一个绅士和学者! – user1672867