我正在努力用Linq生成一个对象子列表。
var assignedObject = new List<int>();
foreach (var obj in myObjects) {
if (IsAssigned(obj)) {
assignedObject.add(obj.Id);
}
}
我现在要做的是使用Linq myObjects
从.Where(Func<T,bool> predicate)
删除已分配的对象。
myObjects = myObject.Where(item => item.Id != assignedObj.All()).ToList();
item.Id != assignedObj.All()
是问题的一部分。
如果可以通过Linq实现,请教育我。
否则,我将实现一个循环。
var remainingObjects = new List<MyClass>();
foreach(var obj in myObjects) {
if (!(assignedObjects.IndexOf(obj.Id) > -1)) {
remainingObjects.Add(obj);
}
}
PS:如果您想知道从其他地方检索到的List<MyClass> myObjects = GetMyObjects(params);
。
答案 0 :(得分:1)
var toRemove = myObjects.Where(item=>assignedObj.Any(a=>a.Id == item.Id)).ToArray()
这有用吗?
答案 1 :(得分:1)
您可以使用以下条件重写All()
:
myObjects = myObject
.Where(item => assignedObj.All(assigned => item.Id != assigned.Id))
.ToList();
但是,使用Contains
:
var assignedIds = new HashSet<int>(assignedObject);
myObjects = myObject.Where(item => assignedIds.Contains(item.Id)).ToList();
使用HashSet<int>
可以在assignedObject
相对较大的情况下(例如,数百个或更多对象)加快查找速度。
答案 2 :(得分:1)
可以是这样的:- (void) scrollViewDidZoom:(UIScrollView *)scrollView
{
CGFloat newBorderWidth = UIScreen.mainScreen.scale / scrollView.zoomScale;
zoomView.layer.borderWidth = newBorderWidth;
}
答案 3 :(得分:1)
试试这个
var assignedObjects = myObjects.Where(m => IsAssigned(m)).ToList()
var remainedObjects = myObjects.Where(m => !IsAssigned(m)).ToList()