[英]Dictionary <string, uint> to comma-separated string?
// Below is an array which contains master data
string[] masterData = { "324", "233", "32", "423", "23435" };
// Below string will always contain a comma separated subset of above master data
string abc = "233,423,99";
我需要的是拥有一个包含所有masterData数组值的字符串键的字典,并且仅将字符串abc中的那些键的值设置为1。 所有其他键的值都必须为0。在这种情况下,字典应为string类型,而value应为uint类型。 在这种情况下,字典应如下所示:
String uint
"324" 0
"233" 1
"32" 0
"423" 1
"23435" 0
请注意,字符串中的99将被忽略,因为只有所有主数据都应存在于字典中。
有没有办法使用linq做到这一点? 如果没有,还有什么其他捷径可以呢?
另外,如何使用linq或任何其他缩短的方法以相反的方式执行上述操作,即将dictionary<string, uint>
转换回逗号分隔的字符串? 并且此字符串应仅包含字典中值为1的那些键。
注意:字典值只能是1或0。
任何帮助深表感谢。
var abcArray = abc.Split(',');
masterData.ToDictionary(p => p, p => (uint)(abcArray.Contains(p) ? 1 : 0));
您可以使用Concat
将第一个数组和分割的字符串加在一起,然后使用GroupBy
将相同的数字分组,然后从中创建Dictionary
,重复的项的Count
大于1。
var dict = masterData
.Concat(abc.Split(','))
.GroupBy(x => x)
.ToDictionary(k => k.Key, v => v.Count() > 1 ? 1 : 0);
要反转,请选择“ Value
为1的所有字符串,然后Join
“ ing”
string result = string.Join(",", dict.Where(x => x.Value > 0)
.Select(k => k.Key)
.ToArray());
string abc = "233,423,99"; var subset = abc.Split(','); var result = masterData.ToDictionary(k => k, k => Convert.ToUInt32(subset.Contains(k))); var reversedResult = result.Where(p => p.Value == 1).Select(p => p.Key).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.