Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换字典<;字符串,字符串>;进入多个1D int[]数组_C# - Fatal编程技术网

C# 转换字典<;字符串,字符串>;进入多个1D int[]数组

C# 转换字典<;字符串,字符串>;进入多个1D int[]数组,c#,C#,如何在运行时将字典转换为一维整数数组?比如说, Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("one", "1,3,6,8"); dic.Add("two", "2,3,6,9"); dic.Add("n", "3,4,1,8"); 有谁能帮我实现这一转换吗?好吧,你可以在Linq的帮助下完成,就像这样: int[] arr1 = dic["one"].Spl

如何在运行时将
字典
转换为一维整数数组?比如说,

Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("one", "1,3,6,8");
dic.Add("two", "2,3,6,9");

dic.Add("n", "3,4,1,8");

有谁能帮我实现这一转换吗?

好吧,你可以在Linq的帮助下完成,就像这样:

  int[] arr1 = dic["one"].Split(',').Select(x => int.Parse(x)).ToArray();
  int[] arr2 = dic["two"].Split(',').Select(x => int.Parse(x)).ToArray();
  int[] arrn = dic["n"].Split(',').Select(x => int.Parse(x)).ToArray();

要有独立的变量,您需要知道编译时涉及的所有数字。(你不能在执行时生成更多的变量……而且你真的不想参与计算数字的单词表示法。)在这一点上,这相当容易:

arr1 = ParseValues(dic["one"]);
arr2 = ParseValues(dic["two"]);
arr3 = ParseValues(dic["three"]);
// etc

static int[] ParseValues(string values)
{
    return values.Split(',').Select(int.Parse).ToArray();
}
请注意,对于空字符串,这将失败-如果需要它来处理(返回空数组),请执行以下操作:

return values.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)
             .Select(int.Parse)
             .ToArray();
编辑:如果您不知道将有多少个值,但您知道它们将始终存在且没有间隙,那么您可以:

// This has to go as far as you need to cope with
string[] words = { "one", "two", "three", "four", "five", "six", ... };

List<int[]> arrays = words.TakeWhile(word => dic.ContainsKey(word))
                          .Select(word => dic[word].Split(',')
                                                   .Select(int.Parse)
                                                   .ToArray())
                          .ToList();
//这必须尽你所能处理
字符串[]单词={“一”、“二”、“三”、“四”、“五”、“六”、…};
列表数组=words.TakeWhile(word=>dic.ContainsKey(word))
.Select(word=>dic[word]。拆分(“,”)
.Select(int.Parse)
.ToArray())
.ToList();
(请注意,在此列表中,元素0将对应于“一”等。它将全部偏移一。)

输出:

现在只需将每个值分配给变量

var arr1 = results[0];
var arr2 = results[1];

我将使用数组列表,而不是声明许多数组

List<int[]> arrays = dic.Values.Select(v => v.Split(',').Select(int.Parse).ToArray())
                        .ToList();
List array=dic.Values.Select(v=>v.Split(',')。Select(int.Parse.ToArray())
.ToList();

数组[0]
将是
1,3,6,8

我不知道编译时字典中的键数。如何在运行时声明任意数量的数组?@user1193665:你不能。如果需要,您可以声明一个
列表
。但是,如果字典键真的是“一”、“二”等,那么您仍然需要一种从
int
转换为单词形式的方法。@user1193665:有关创建
列表的示例,请参见我的编辑。
var arr1 = results[0];
var arr2 = results[1];
List<int[]> arrays = dic.Values.Select(v => v.Split(',').Select(int.Parse).ToArray())
                        .ToList();