如何获取List中的数字分割

时间:2015-06-04 18:29:53

标签: c# list

我有一个文本文件,其中有一对数字,我在List中复制。文本文件有例如:

1 0 30 15 43 23
12 23 10 12 0 1

我想得到每一行的确切数字,因为我想将它与我从控制台输入的数字进行比较。我尝试Split(' '),但它不起作用。 我想比较一下这个怎么样呢?

static void Main()
{
    StreamReader reader = new StreamReader("file.txt");
    using (reader)
    {
        string currentLine = reader.ReadLine();
        while(currentLine!=null)
        {
            currentLine = reader.ReadLine();
            Combinations.Add(currentLine);
        }
    }

    Console.WriteLine("Enter six numbers to check the combinations:");
    int a1= int.Parse(Console.ReadLine());
    int a2 = int.Parse(Console.ReadLine());
    int a3 = int.Parse(Console.ReadLine());
    int a4 = int.Parse(Console.ReadLine());
    int a5 = int.Parse(Console.ReadLine());
    int a6 = int.Parse(Console.ReadLine());
    FindWinners(a1, a2, a3, a4, a5, a6);
}

static void FindWinners(int a1,int a2,int a3,int a4,int a5,int a6)
{
    foreach(var item in Combinations)
    {
        Console.WriteLine();
    }
}

1 个答案:

答案 0 :(得分:2)

我不确定您分割数据时遇到的问题。只要您知道数字组合之间有空格,就可以使用.Split(' '),因此请检查并确保文件中的数字之间只有一个空格。

然后,您希望从用户那里获得6个数字,看看它们是否与任何组合相匹配。为此,我会尝试以下(我只是使用包含您提供的数据的List,而不是读取文件):

static List<string> combinations = new List<string> {
    "1 0 30 15 100 23",
    "12 23 10 12 0 1"
};

public static void Main()
{
    Console.WriteLine("Enter six numbers to check the combinations:");
    int a1 = int.Parse(Console.ReadLine());
    int a2 = int.Parse(Console.ReadLine());
    int a3 = int.Parse(Console.ReadLine());
    int a4 = int.Parse(Console.ReadLine());
    int a5 = int.Parse(Console.ReadLine());
    int a6 = int.Parse(Console.ReadLine());
    FindWinners(a1, a2, a3, a4, a5, a6);
    Console.ReadLine();
}

private static void FindWinners(params int[] numbers)
{
    // Sort the numbers from least to greatest
    Array.Sort(numbers);
    foreach (int[] combo in combinations
        // This select makes the string array
        .Select(combination => combination.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
        // This select turns the string array, from the previous select, and turns it into an integer
        //   array sorted from least to greatest.
        .Select(combination => combination.Select(c => Convert.ToInt32(c)).OrderBy(c => c).ToArray()))
    {
        Console.WriteLine(combo.SequenceEqual(numbers) ? "Winner!" : "Loser!");
    }
}

结果:

Enter six numbers to check the combinations:
100
0
30
1
15
23
Winner!
Loser!

FindWinners()中发生了什么:

所有用户提供的整数都由params关键字装入整数数组。然后我将foreach通过每个组合,然后将其转换为整数数组。两个数组都从最小到最大排序,然后combo.SequenceEquals(number)检查每个元素按顺序彼此相等。如果他们都平等,我输出“赢家!”否则我输出“失败者!”