标签: iterator

调试时无法进入迭代器块(C#)

我正在尝试调试从单元测试项目执行的代码,但是当我尝试进入某个方法时,它只是直接进入下一行,并且该方法内的断点未被命中.该方法位于一个不同项目的类中,但所有代码都是在调试模式下构建的,我尝试过清理和重建解决方案,没有任何乐趣.

但是,这只是因为我在方法中添加了一个迭代器块.当我删除它并重建时,我可以介入.奇怪的?

我正在使用Visual Studio 2010 Beta 1,这可能只是一个错误吗?

c# debugging iterator visual-studio-2010

8
推荐指数
2
解决办法
1915
查看次数

在迭代器中"终于"阻塞

在C#迭代器块中是否有任何方法可以提供一个代码块,该代码块将在foreach结束时自动运行(或者自然地被打破),比如清理资源?

我提出的最好的方法是使用using构造,这很好,但需要一个IDisposable类来进行清理.例如:

    public static IEnumerable<string> ReadLines(this Stream stream)
    {
        using (StreamReader rdr = new StreamReader(stream))
        {
            string txt = rdr.ReadLine();
            while (txt != null)
            {
                yield return txt;
                txt = rdr.ReadLine();
            }
            rdr.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# iterator

8
推荐指数
1
解决办法
338
查看次数

Java - 何时使用迭代器?

我想更好地了解何时应该而且不应该使用迭代器.对我来说,每当我有大量数据需要迭代时,我都会为它编写一个Iterator.如果它也适合Iterator接口,那么它似乎是一场胜利.

我正在阅读一点,使用Iterator会产生很多开销.

我使用迭代器的一个很好的例子是迭代一堆SQL脚本,一次执行一个查询,读取它,然后执行它.

我应该注意另一种表现权衡吗?在使用迭代器之前,我会读取整个SQL命令字符串以执行到ArrayList中,然后迭代它.如果导入相当大(就像地理位置数据一样,那么服务器往往会陷入困境).

沃尔特

java architecture performance iterator

8
推荐指数
1
解决办法
6339
查看次数

Python等效于LINQ

在C#中,使用LINQ,如果我有en枚举enumerable,我可以这样做:

// a: Does the enumerable contain an item that satisfies the lambda?
bool contains = enumerable.Any(lambda);

// b: How many items satisfy the lambda?
int count = enumerable.Count(lambda);

// c: Return an enumerable that contains only distinct elements according to my custom comparer
var distinct = enumerable.Distinct(comparer);

// d: Return the first element that satisfies the lambda, or throws an exception if none
var element = enumerable.First(lambda);

// e: Returns an enumerable containing all the elements except …
Run Code Online (Sandbox Code Playgroud)

python iterator functional-programming

8
推荐指数
3
解决办法
4597
查看次数

如何为属性的集合属性编写自己的迭代器(使用正确的类型转换)?

我有一个带有一些对象组合的模型类,我不知道为此编写迭代器的最佳方法.要更详细地查看问题,这里是层次结构(半伪代码):

Root类:

MYEntity : NSObject
@property int commonProperty;
@property NSArray *childs; //Childs of any kind.
Run Code Online (Sandbox Code Playgroud)

一些具体的子类:

MYConcreteStuff : MYEntity
@property int number;

MYConcreteThing : MYEntity
@property NSString *string;
Run Code Online (Sandbox Code Playgroud)

并且具有具体集合的根对象:

MYRoot : MYEntity
@property MYEntity *stuff; //Collect only stuff childs here.
@property MYEntity *things; //Collect only thing childs here.
Run Code Online (Sandbox Code Playgroud)

现在我可以为集合编写很酷的成员访问器(在MYEntity中),如:

-(MYEntity*)entityForIndex:(int) index
{
    if ([self.childs count] > index)
        return [self.childs objectAtIndex:index];

    return nil;      
}
Run Code Online (Sandbox Code Playgroud)

对于根对象,甚至更酷,良好类型的成员成员访问器.

-(MYConcreteThing*)thingForIndex:(int) index
{
    if ([self.things count] > index)
        return (MYConcreteThing*)[self.things entityForIndex];

    return nil;    
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何为这样的集合编写一些oneliner迭代器.想要的客户端代码如下:

for …
Run Code Online (Sandbox Code Playgroud)

collections iterator casting objective-c ios

8
推荐指数
1
解决办法
2622
查看次数

输入流上基于范围的循环

要迭代输入流,我们通常会使用std::istream_iterator如下:

typedef std::istream_iterator<std::string> input_iterator;

std::ifstream file("myfile");
for (input_iterator i(file); i != input_iterator(); i++) {
  // Here, *i denotes each element extracted from the file
}
Run Code Online (Sandbox Code Playgroud)

如果我们可以使用基于范围的for语句来迭代输入流,那就太好了.但是,对于类的对象,范围为基础的for需要的对象具有begin()end()成员函数(§6.5.4,粗体强调):

  • 如果_RangeT是一个数组类型,开始-EXPR最终EXPR__range__range + __bound分别,其中__bound在阵列的约束.如果_RangeT是未知大小的数组或不完整类型的数组,则该程序格式不正确;

  • 如果_RangeT是一个类型时,不合格的IDS begin并且end在类的范围查找_RangeT仿佛由类成员访问查找(3.4.5),并且如果任一个(或两者)找到至少一个声明,开始-EXPR端-expr分别是__range.begin()__range.end();

  • 否则,开始-EXPR最终EXPRbegin(__range)end(__range) …

c++ iterator inputstream c++11

8
推荐指数
2
解决办法
2898
查看次数

擦除`std :: list`的`end()`的行为是什么?

我需要std::list在找到它之后从中删除一个元素std::find.std::list::erase使用end()列表调用的行为是什么?我的情况是这样的:

std::list<T> mylist;
T value;
std::list::iterator it = std::find(mylist.begin(), mylist.end(), value);
std::list::iterator next = mylist.erase(it);
Run Code Online (Sandbox Code Playgroud)

cplusplus.com说:

如果position(或range)有效,则函数永远不会抛出异常(无抛出保证).否则,它会导致未定义的行为.

但我不知道的是end()那里是否有效.

c++ iterator stl

8
推荐指数
2
解决办法
1673
查看次数

Java - 迭代列表中的每两个元素

在同时处理2个元素的同时迭代列表的最佳方法是什么?

例:

List<String> strings = Arrays.asList("item 1", "item 2", "item 3", "item 4");
for(int i = 0; i < strings.size(); i++){
    String first = strings.get(i);
    String second = null;
    if(strings.size() > i + 1){
        second = strings.get(i + 1);
    }
    System.out.println("First [" + first + "] - Second [" + second + "]");
}
Run Code Online (Sandbox Code Playgroud)

结果是:

First [item 1] - Second [item 2]
First [item 2] - Second [item 3]
First [item 3] - Second [item 4]
First [item 4] - …
Run Code Online (Sandbox Code Playgroud)

java iterator

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

将选项或结果的向量转换为仅成功值时,如何避免解包?

我有一个Vec<Result<T, E>>,我想忽略所有的Err值,将其转换为Vec<T>.我可以做这个:

vec.into_iter().filter(|e| e.is_ok()).map(|e| e.unwrap()).collect()
Run Code Online (Sandbox Code Playgroud)

这是安全的,但我想避免使用unwrap.有没有更好的方法来写这个?

iterator rust

8
推荐指数
1
解决办法
2383
查看次数

如何屏蔽Python 3嵌套字典以返回仅包含特定项的新字典?

我正在使用API​​的几个端点,它返回的数据非常冗长.我想将这些数据的一部分提供给其他地方的另一段代码.

假设我有几个这样的字典(我计划循环并过滤):

asset = {
    'id': 1,
    'name': 'MY-PC',
    'owner': 'me',
    'location': 'New York City',
    'model': {
        'id': 1,
        'name': 'Surface',
        'manufacturer': {
            'id': 1,
            'name': 'Microsoft'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个将该字典带入的函数,以及一个"掩码",它将用于创建仅允许的项目的新字典.这可能是一个示例掩码(但是,我可以使用任何格式使得生成的代码最简洁):

mask = {
    'id': True,
    'name': True,
    'model': {
        'id': True,
        'name': True,
        'manufacturer': {
            'name': True
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后该函数应该返回:

mask = {
    'id': 1,
    'name': 'MY-PC',
    'model': {
        'id': 1,
        'name': 'Surface',
        'manufacturer': {
            'name': 'Microsoft'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Python 3中是否已经内置了有助于此的内容?看起来如果我必须手动执行此操作,它会很快变得非常难看.我发现itertools.compress,但这似乎是列表,不会处理字典的复杂性.

python dictionary iterator

8
推荐指数
1
解决办法
1183
查看次数