繁体   English   中英

字典 <string, uint> 逗号分隔的字符串?

[英]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();

https://dotnetfiddle.net/5eU5B0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM