从文件创建元组数组

本文关键字:数组 元组 文件创建 | 更新日期: 2023-09-27 18:04:29

我有一个充满文本和数字的文件,需要将其导入Tuple<string, int>数组(Tuple<string, int>[] vowels = new Tuple<string, int>[81])。文件看起来像这样

a,2,e,6,i,3,o,8,u,2,y,5

我当前使用的方法最初使用

将其导入到字符串数组中

string[] vowelsin = File.ReadAllText("path.txt").Split(',');

导入后,我使用

将数据转换为元组
    for (int x = 0; x < 81; x++)
        vowels[x] = Tuple.Create(vowelin[x*2], int.Parse(vowelin[(x*2) + 1]));

虽然它可以工作,但它有点难以阅读,并且在测试期间需要大约100ms才能完成。是否有任何潜在的单行程序、更快的方法或更可读的方法可以完成相同的事情?

从文件创建元组数组

string[] vowelsin = File.ReadAllText("path.txt").Split(',');
vowles = vowelsin.Zip(vowelsin.Skip(1), 
                           (a, b) => new Tuple<string, string>(a, b))
                      .Where((x, i) => i % 2 == 0)
                      .ToArray();

您可以使用KeyValuePairDictionary来代替元组。

根据这篇文章,元组比KeyValuePair更快。你可以在这里找到更多观点。

另一方面,这里对字典和元组进行了比较。

好消息来了:

在c# 7.0中引入了一个关于元组的新特性:

(string, string, string) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}
这是使用元组的新方法:(type,…,类型),这意味着该方法将返回多个值(在本例中为三个)。

该方法现在有效地返回三个字符串,作为元组值中的元素包装。

方法的调用者现在将接收一个元组,并且可以单独访问元素:

var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
在这里你会发现这些新元组相对于System.Tuple<>
的优势