Intersect可用于查找两个集合之间的匹配,如下所示:
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call Intersect extension method.
var intersect = array1.Intersect(array2);
// Write intersection to screen.
foreach (int value in intersect)
{
Console.WriteLine(value); // Output: 2, 3
}
Run Code Online (Sandbox Code Playgroud)
然而,我想要实现的是相反的,我想列出比较两个集合时缺少的项目:
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call "NonIntersect" extension method.
var intersect = array1.NonIntersect(array2); // …
Run Code Online (Sandbox Code Playgroud) len()
Python内置函数的功能成本是多少?(列表/元组/串/字典)
如何克隆ArrayList
并在Java中克隆其项目?
例如,我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
Run Code Online (Sandbox Code Playgroud)
我希望那些物品clonedList
与狗列表中的物品不同.
如果我有一个收藏品,例如Collection<String> strs
,我怎样才能获得第一件商品?我可以打电话给Iterator
第一个next()
,然后扔掉它Iterator
.有没有浪费的方法吗?
我有两个arraylist filelist
并且imgList
彼此相关,例如与"e1.jpg"相关的"H1.txt".如何自动随机名单imgList
根据随机化fileList
?就像在Excel中一样,如果我们对某个列进行排序,另一列会自动跟随吗?
String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));
String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));
//randomized files
Collections.shuffle(fileList);
Run Code Online (Sandbox Code Playgroud)
随机化后的输出例如:
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
Run Code Online (Sandbox Code Playgroud)
预期输出:
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
Run Code Online (Sandbox Code Playgroud) 我喜欢元组.它们允许您快速将相关信息分组在一起,而无需为其编写结构或类.这在重构非常本地化的代码时非常有用.
然而,初始化它们的列表似乎有点多余.
var tupleList = new List<Tuple<int, string>>
{
Tuple.Create( 1, "cow" ),
Tuple.Create( 5, "chickens" ),
Tuple.Create( 1, "airplane" )
};
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?我希望得到一个类似于字典初始化器的解决方案.
Dictionary<int, string> students = new Dictionary<int, string>()
{
{ 111, "bleh" },
{ 112, "bloeh" },
{ 113, "blah" }
};
Run Code Online (Sandbox Code Playgroud)
我们不能使用类似的语法吗?
例如,DataGridView允许您执行此操作:
DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];
Run Code Online (Sandbox Code Playgroud)
但对于我的生活,我找不到索引/方括号运算符的文档.他们怎么称呼它?它在哪里实施?可以扔吗?我怎么能在自己的课上做同样的事情?
ETA:感谢所有快速解答.简而言之:相关文件属于"项目"属性; 重载的方法是声明一个属性,如public object this[int x, int y]{ get{...}; set{...} }
; 至少根据文档,DataGridView的索引器不会抛出.它没有提到如果提供无效坐标会发生什么.
再次ETA:好的,即使文档没有提到它(顽皮的微软!),事实证明,如果你为它提供无效的坐标,DataGridView的索引器实际上会抛出一个ArgumentOutOfRangeException.公平的警告.
我正在迁移一段代码以利用泛型.这样做的一个论点是for循环比跟踪索引或使用显式迭代器更清晰.
在大约一半的情况下,列表(ArrayList)通过今天使用索引以相反的顺序迭代.
有人可以建议一种更清洁的方式(因为我不喜欢indexed for loop
使用集合时),虽然它确实有用吗?
for (int i = nodes.size() - 1; i >= 0; i--) {
final Node each = (Node) nodes.get(i);
...
}
Run Code Online (Sandbox Code Playgroud)
注意:我无法在JDK之外添加任何新的依赖项.
我确定这是一个很好的理由,但有人可以解释为什么java.util.Set
界面缺乏get(int Index)
,或任何类似的get()
方法?
似乎套装非常适合放入物品,但我找不到从中检索单个物品的优雅方式.
如果我知道我想要第一个项目,我可以使用set.iterator().next()
,但是否则我似乎必须转换为数组来检索特定索引处的项目?
从集合中检索数据的适当方法是什么?(除了使用迭代器)
我确信它被排除在API之外意味着有一个很好的理由不这样做 - 有人可以开导我吗?
编辑: 这里有一些非常好的答案,还有一些说"更多背景".特定场景是一个dbUnit测试,我可以合理地断言查询返回的集只有一个项目,我试图访问该项目.
但是,没有这种情况,这个问题更有效,因为它仍然更受关注:
集合和列表之间有什么区别.
感谢所有人在下面的精彩答案.