标签: enumerator

Scalaz迭代:"提升"`EnumeratorT`以匹配`IterateeT`为"更大"的monad

如果我有一个EnumeratorT和一个相应的IterateeT我可以一起运行它们:

val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c"))
val it: IterateeT[String, Task, Int] = IterateeT.length

(it &= en).run : Task[Int]
Run Code Online (Sandbox Code Playgroud)

如果枚举器monad比iteratee monad"更大",我可以使用up或者更一般Hoist地"提升"iteratee以匹配:

val en: EnumeratorT[String, Task] = ...
val it: IterateeT[String, Id, Int] = ...

val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist(
  implicitly[Task |>=| Id]).apply(it)
(liftedIt &= en).run: Task[Int]
Run Code Online (Sandbox Code Playgroud)

但是,当iteratee monad比枚举器monad"更大"时,我该怎么办?

val en: EnumeratorT[String, Id] = ...
val it: IterateeT[String, Task, Int] = ...

it &= ???
Run Code Online (Sandbox Code Playgroud)

似乎没有任何Hoist实例EnumeratorT,也没有任何明显的"提升"方法.

monads scala enumerator scalaz iterate

445
推荐指数
1
解决办法
1万
查看次数

43
推荐指数
2
解决办法
5万
查看次数

在Ruby早期逃避.each {}迭代

码:

 c = 0  
 items.each { |i|  
   puts i.to_s    
   # if c > 9 escape the each iteration early - and do not repeat  
   c++  
 }  
Run Code Online (Sandbox Code Playgroud)

我想抓住前10个项目,然后离开"每个"循环.

我该如何用?替换注释行?有更好的方法吗?更多Ruby惯用的东西?

ruby iterator loops enumerator

39
推荐指数
3
解决办法
5万
查看次数

Enumerator.MoveNext()的奇怪行为

有人可以解释为什么这段代码在无限循环中运行?为什么总是MoveNext()回来true

var x = new { TempList = new List<int> { 1, 3, 6, 9 }.GetEnumerator() };
while (x.TempList.MoveNext())
{
  Console.WriteLine("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

c# enumerator infinite-loop

35
推荐指数
1
解决办法
1649
查看次数

为什么C#Arrays使用Enumeration的引用类型,但List <T>使用可变结构?

根据我的阅读,出于性能原因,某些集合的枚举器类型的设计决策是可变结构而不是引用类型.List.Enumerator是最知名的.

我正在研究一些使用数组的旧代码,并且惊讶地发现C#Arrays返回类型SZGenericArrayEnumerator作为它们的通用枚举器类型,它是一个引用类型.

我想知道是否有人知道为什么当许多其他性能关键集合使用可变结构时,Array的通用迭代器被实现为引用类型.

c# arrays list mutable enumerator

23
推荐指数
1
解决办法
1704
查看次数

C#Foreach语句不包含GetEnumerator的公共定义

我正在使用C#构建的Windows窗体应用程序出现问题.该错误表明"foreach语句不能对'CarBootSale.CarBootSaleList'类型的变量进行操作,因为'CarBootSale.CarBootSaleList'不包含'GetEnumerator'的公共定义".

我似乎无法理解造成这种情况的原因.

这是抛出错误的代码:

        List<CarBootSaleList> Sortcarboot = new List<CarBootSaleList>();

        foreach (CarBootSale c in carBootSaleList)
        {
            if (c.Charity == "N/A")
            {
                Sortcarboot.Add(carBootSaleList);
                textReportGenerator.GenerateAllReport(Sortcarboot, AppData.CHARITY);
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是CarBootSaleList类,它说没有GetEnumerator定义:

public class CarBootSaleList
{

    private List<CarBootSale> carbootsales;

    public CarBootSaleList()
    {
        carbootsales = new List<CarBootSale>();
    }

    public bool AddCarBootSale(CarBootSale carbootsale)
    {
        bool success = true;
        foreach (CarBootSale cbs in carbootsales)
        {
            if (cbs.ID == carbootsale.ID)
            {
                success = false;
            }
        }
        if (success)
        {
            carbootsales.Add(carbootsale);
        }
        return success;
    }

    public void DeleteCarBootSale(CarBootSale carbootsale)
    {
        carbootsales.Remove(carbootsale);
    } …
Run Code Online (Sandbox Code Playgroud)

c# public definition enumerator

22
推荐指数
4
解决办法
13万
查看次数

Ruby生成器与Python生成器

我一直在研究Ruby和Python生成器之间的相似之处/差异(Enumerators在Ruby中称为),并且据我所知,它们几乎相同.

然而,我注意到的一个区别是Python Generators支持一种close()方法,而Ruby Generators则不支持.从Python文档中可以看出该close()方法执行以下操作:

在生成器功能暂停的位置引发GeneratorExit.如果生成器函数然后引发StopIteration(通过正常退出,或者由于已经关闭)或GeneratorExit(通过不捕获异常),则关闭返回其调用者.

Ruby Enumerators不支持该close()方法有充分的理由吗?还是意外遗漏?

我还发现Ruby Enumerators支持一种rewind()方法,而Python生成器却没有......这也是有原因的吗?

谢谢

ruby python generator enumerator

20
推荐指数
2
解决办法
4542
查看次数

枚举器与迭代包的比较

目前,有两种流行的选择实现了iteratee模式:

他们的相对好处是什么?是一个比另一个好,还是取决于用例(如果是的话,决定使用哪个标准的标准是什么)?

haskell loops enumerator

20
推荐指数
1
解决办法
728
查看次数

Ruby Array #map中的`return`

我有一个方法,我想决定在map函数中返回什么.我知道这可以通过分配变量来完成,但这就是我可以做到的事情;

def some_method(array)
    array.map do |x|
      if x > 10
         return x+1 #or whatever
      else
         return x-1
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

这不会像我期望的那样工作,因为第一次return被击中,它从方法返回,而不是在map函数中返回,类似于javascript的map函数中返回的使用方式.

有没有办法实现我想要的语法?或者我是否需要将其分配给变量,并将其挂在最后,如下所示:

def some_method(array)
    array.map do |x|
      returnme = x-1
      if x > 10
         returnme = x+1 #or whatever
      end
      returnme
    end
end
Run Code Online (Sandbox Code Playgroud)

ruby arrays return enumerator

19
推荐指数
2
解决办法
8319
查看次数

为什么C#中没有ReverseEnumerator?

有没有人知道是否有特定原因或设计决定不在C#中包含反向调查员?如果有一个与C++ reverse_iterator相同的东西,就像Enumerator相当于C++ 那样会很好iterator.可以反向迭代的集合只会实现像IReverseEnumerable这样的东西,可以做类似的事情:

List<int>.ReverseEnumerator ritr = collection.GetReverseEnumerator();
while(rtir.MoveNext())
{
 // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这样,您就可以以相同的方式迭代Lists和LinkedLists,而不是使用索引器为另一个链接和之前的链接,从而实现更好的抽象

c# enumerator

17
推荐指数
2
解决办法
7700
查看次数