我有一个字符串的字典和字符串的HashSet,想要删除那些具有另一个的元素,反之亦然:
这是工作示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script id="sap-ui-bootstrap" type="text/javascript" src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_belize" data-sap-ui-xx-bindingSyntax="complex">
</script>
<script id="view1" type="sapui5/xmlview">
<mvc:View xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:core="sap.ui.core">
<DateTimePicker value="20170909103032" valueFormat="yyyyMMddHHmmss" displayFormat="MM dd, yyyy HH:mm a" />
</mvc:View>
</script>
<script>
var myView = sap.ui.xmlview({
viewContent: jQuery('#view1').html()
}); // accessing the HTML inside the script tag above
myView.placeAt('content');
</script>
</head>
<body id='content' class='sapUiBody'>
</body>
</html>
如何使用Linq做到这一点?
这是输入
var squad = new Dictionary<string, HashSet<string>>();
foreach (var curr in squad.Keys)
{
foreach (var creature in squad.Keys)
{
if (squad[curr].Contains(creature)
&& squad[creature].Contains(curr))
{
squad[curr].Remove(creature);
squad[creature].Remove(curr);
}
}
}
以下是输出
Mozilla -> Tony
Tony -> Godzilla
Mozilla -> Dony
Tony -> Franzilla
Mozilla -> Mony
Tony -> Mozilla
Blaze it!
整个代码:
Mozilla : 2
Tony : 2
就像Linq一样,我很想知道是否有办法在Linq中改变这一点,或者只是以更聪明/更好的方式改变它?
答案 0 :(得分:1)
我无法弄清楚这段代码应该做什么。
虽然样本数据&amp;输出可能对您有意义,将输入更改为Mozilla -> Dony
产生Mozilla : 1
的一个条目,这与您对其目的的描述不符。
无论如何,你的问题是关于LINQ&amp;用它来删除元素。
这是对LINQ底层范式的基本误解。
首先,LINQ基于IEnumerable
,它是一个只读的仅向前迭代器。
您无法从迭代器中删除项目。
其次,LINQ是一种函数式编程范例。 LINQ查询表示序列的不可变投影。这个词,“不可变的”,在函数式编程中非常重要。你正在思考,你有一个你要变异的序列,删除项目,然后使用新的变异序列。功能编程表示改变seqeunce是不好的,所以宁可从原始序列投射新序列,然后使用投影序列。您仍然可以获得相同的输出,但最终的原始序列将完好无损。