在成批转换列表时,yield return跳过已签入if条件但由于大小限制而未添加到bucket的对象。
消息总计数:4
第一个存储区计数:2
第二个存储区计数:1
跳过消息列表中的第三条消息
在这里,我正在创建大小为250kb的存储桶。是否有其他方法保存正确的状态,或者是否需要使用for循环?
public static IEnumerable<IEnumerable<Message>> GetBatchSize(IList<Message> source)
{
List<Message> bucket = null;
long size = 0;
foreach (var item in source)
{
if (bucket == null)
{
bucket = new List<Message>();
}
size = size + item.Size;
if (250 - (size / 1024) >= item.Size / 1024)
{
bucket.Add(item);
continue;
}
yield return bucket;
bucket = new List<Message>();
size = 0;
}
if (bucket?.Count > 0 && size<250)
{
yield return bucket;
}
}
(假设没有单个消息的大小大于桶大小)
首先,当当前bucket不能包含当前消息时,您应该将消息放入下一个bucket,而不是将其丢弃。因此,在foreach
循环中返回收益率后,您应该执行以下操作:
bucket = new() { item };
^^^^^^^^
此外,您向桶中添加物品的条件不正确。它“双重计算”当前项目的大小。请注意,size
此时已经有了项。大小
已添加到其中!此外,在此处使用除法将丢弃余数,这将导致在以下情况下产生不正确的结果:
GetBatchSize(new List<Message> {
new Message { Size = 250 * 1024 - 1 },
new Message { Size = 1 },
new Message { Size = 1 },
});
与其除法,不如乘:
if (size <= 250 * 1024)
{
bucket.Add(item);
continue;
}
另外,我不确定最后一个大小的目的是什么
if (bucket?.Count > 0)
{
yield return bucket;
}
您可以将项目添加到收益返回后新创建的列表中:
foreach (var item in source)
{
// omitted for brevity
yield return bucket;
bucket = new List<Message> { item };
size = item.Size;
}
我有一个返回: 然后另一个用户这样使用它: 如何处理任何迭代中的失败情况? 我知道我可以使用,在这种情况下,错误结果将被忽略: 的迭代器根据成功状态具有0或1项,如果为0,将过滤掉它。 但是,我不想忽略错误,而是想让整个代码块停止并返回一个新错误(基于映射中出现的错误,或者只是转发现有错误)。 在Rust中如何最好地处理此问题?
将这些视为对象: 查看java文档,对于LinkedList类,LinkedList类中没有迭代器方法的实现,但是,实现是在AbstractSequentialList类中。 listIterator()方法在AbstractList类中实现,AbstractSequentialList的父类,总结一下,如果我没弄错的话,它返回一个不使用节点概念的迭代器对象。 但是方法是在LinkedList类中
我正在尝试研究java单词计数示例。据我所知,spark RDD是一种特殊类型的集合,而flat map基本上转换一个嵌套的集合(比如Stream>=>Stream),那么为什么下面一行中的spark Java API需要为每一行返回一个迭代器呢?如何在RDD中使用? 函数不是应该在arrays.aslist(line.toString().split(“”))结束吗?
使用web3.eth.getCoinbase()方法获取当前接收挖矿奖励的账户地址。 调用: web3.eth.getCoinbase([callback]) 返回值: 一个Promise对象,其解析值为接收挖矿奖励的账户地址字符串,20字节长。 示例代码: web3.eth.getCoinbase().then(console.log); > "0x11f4d0A3c12e86B4b5F39B
我可以看到返回。但是现在已经添加到C++20标准中,为什么返回?cppreference指定: 返回值 等于last的迭代器。 这个选择背后的理性是什么? 与相比,用例的优势是什么?
我正在学习使用节点进行后端开发。js和mongodb。Mongoose有一个方法<code>模型。保存(函数(err,model))由于某些原因无法保存文档时必须返回的状态代码。 在代码方面: