Array.IndexOf用于2个匹配值c#

时间:2014-03-28 06:59:05

标签: c# arrays

我有一个存储一些信息的数组。

我使用以下代码搜索此数组以匹配第一列:

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

1 个答案:

答案 0 :(得分: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(),
            };