2014-03-28 39 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