标签: enumerate

如何跟踪(枚举)实现接口的所有类

我有一种情况,我有一个界面,定义某个类的行为,以填补我的程序中的某个角色,但在这个时间点,我不是100%肯定我将编写多少个类来填补该角色.但是,与此同时,我知道我希望用户能够从GUI组合/列表框中选择实现他们想要用来填充某个角色的界面的具体类.我希望GUI能够枚举所有可用的类,但是每当我决定实现一个新类来填充该角色时,我宁愿不必返回并更改旧代码(这可能是几个月之后)

我考虑过的一些事情:

  1. 使用枚举
    • 优点:
      1. 我知道该怎么做
    • 缺点
      1. 添加新类时,我将不得不更新枚举更新
      2. 难以迭代
  2. static在接口中使用某种列表对象,并在实现类的定义文件中添加新元素
    • 优点:
      1. 不必更改旧代码
    • 缺点:
      1. 甚至不确定这是否可行
      2. 不确定要存储什么样的信息,以便工厂方法可以选择正确的构造函数(可能是字符串和返回指向接口对象的指针的函数指针之间的映射)

我猜这是一个问题(或类似的问题),更有经验的程序员可能在之前(经常)遇到过,并且这种问题可能有一个共同的解决方案,这几乎肯定比任何我都好.能够想出来的.那么,我该怎么做?

(PS我搜索过,但我发现的都是这个,而且它不一样:我如何枚举所有实现通用接口的项目?看来他已经知道如何解决我想弄清楚的问题了.)

编辑:我将标题重命名为"我怎样才能跟踪......",而不仅仅是"我怎么能枚举......"因为原来的问题听起来像是我对检查运行时环境更感兴趣,我在哪里真正感兴趣的是编译时簿记.

c++ class enumerate

7
推荐指数
1
解决办法
1824
查看次数

如何使用Delphi 6迭代初始化的枚举类型并避免"越界"错误?

我使用的是Delphi 6 Professional.我正在与DLL libraty接口,该libraty声明了一个enumberated类型,如下所示:

TExtDllEnum = (ENUM1 = $0, ENUM2 = $1, ENUM3 = $2, ENUM4 = $4, ENUM5 = $8, ENUM6 = $10);
Run Code Online (Sandbox Code Playgroud)

如您所见,初始值不是连续的.如果我尝试使用for循环迭代类型,如下所示:

var
    e: TExtDllEnum;
begin
    for e := Low(TExtToDllEnum) to High(TExtToDllEnum) do
    ... // More code
end;
Run Code Online (Sandbox Code Playgroud)

Delphi仍然将每个循环调用增加1,从而为e创建不是枚举类型成员的数值(例如,'3'),并导致"越界"错误.如何在for循环中迭代枚举类型,该循环只生成枚举类型的有效值?

谢谢.

delphi types loops for-loop enumerate

7
推荐指数
3
解决办法
3147
查看次数

枚举嵌入式资源目录中的文件

在WPF中,是否有一种方法可以枚举特定嵌入式资源目录中的所有文件?也就是说,所有项目的目录都具有设置为"资源"的"构建动作".

wpf resources enumerate

7
推荐指数
1
解决办法
4332
查看次数

迭代LaTeX中的字符/字符串数组

这是我之前发布的问题的延续(在R中的Sweave中整齐地输出字符串元素).我有一个字符串数组,我试图将每个元素输出到LaTeX.我可以使用以下代码实现:

\documentclass[12pt,english,nohyper]{tufte-handout}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackaage{hyperref}
\usepackage{graphicx}
\usepackage[space]{grffile}
\usepackage{geometry}
\usepackage{enumitem}
\usepackage{pgffor}

\makeatletter
\makeatother

\begin{document}

<<include=FALSE>>=
library(ggplot2)
library(reshape2)
library(xtable)
@

\centerline{\Large\bf This is a test}
\vspace{1cm}

\noindent
My List:
\vspace{2mm}
Run Code Online (Sandbox Code Playgroud)

.

<<echo=FALSE,results='asis'>>=
myList = c("A. This is the first item in my list.", "B. This is the second item in my list, and it will span across two lines because it is so long. This is the second item in my list, and it will span across two …
Run Code Online (Sandbox Code Playgroud)

arrays latex for-loop enumerate

7
推荐指数
1
解决办法
1457
查看次数

在Swift 3中沿着字典迭代

我试图迭代字典,以修剪未经证实的条目.以下Objective-C代码的Swift 3转换不起作用:

[[self sharingDictionary] enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
                    SharingElement* element=[[self sharingDictionary] objectForKey:key];
                    if (!element.confirmed){
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [element deleteMe];
                        });
                        [[self sharingDictionary] performSelector:@selector(removeObjectForKey:) withObject:key
                                                       afterDelay:.2];
                    } else{
                        element.confirmed=NO;
                }];
Run Code Online (Sandbox Code Playgroud)

所以我尝试以这种方式使用以下紧凑的enumerated()方法:

for (key, element) in self.sharingDictionary.enumerated(){
            if (!element.confirmed){
                    element.deleteMe()
                self.perform(#selector(self.removeSharingInArray(key:)), with:key, afterDelay:0.2);
            } else{
                element.confirmed=false
            }
        }
Run Code Online (Sandbox Code Playgroud)

然而,编译器在处理变量'element'的使用时报告以下错误:

元组类型的值'(键:Int,值:SharingElement)'没有成员'确认'

就像'元素'占据了完整的元组父亲而不是其能力的一部分.是使用enumerated()或在字典处理中的问题,我该如何解决?

dictionary enumerate swift3

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

python - 通过readlines(size)提高大文件搜索的效率

我是Python新手,我目前正在使用Python 2.我有一些源文件,每个源文件都包含大量数据(大约1900万行).它看起来如下:

apple   \t N   \t apple
n&apos
garden  \t N   \t garden
b\ta\md 
great   \t Adj \t great
nice    \t Adj \t (unknown)
etc
Run Code Online (Sandbox Code Playgroud)

我的任务是在每个文件的第3列搜索一些目标词,并且每次在语料库中找到目标词时,必须将该词前后的10个词添加到多维词典中.

编辑:应排除包含'&','\'或字符串'(未知)'的行.

我尝试使用readlines()和enumerate()来解决这个问题,如下面的代码所示.代码执行它应该做的事情但显然对源文件中提供的数据量不够高效.

我知道readlines()或read()不应该用于大型数据集,因为它将整个文件加载到内存中.然而,逐行读取文件,我没有设法使用枚举方法来获取目标词之前和之后的10个单词.我也不能使用mmap,因为我没有权限在该文件上使用它.

所以,我认为具有一定大小限制的readlines方法将是最有效的解决方案.然而,为此,我不会做出一些错误,因为每次达到大小限制结束时,目标字不会被捕获,因为代码刚刚破坏了10个字?

def get_target_to_dict(file):
targets_dict = {}
with open(file) as f:
    for line in f:
            targets_dict[line.strip()] = {}
return targets_dict

targets_dict = get_target_to_dict('targets_uniq.txt')
# browse directory and process each file 
# find the target words to include the 10 words before and after to the dictionary
# exclude lines starting with …
Run Code Online (Sandbox Code Playgroud)

python dictionary enumerate multidimensional-array readlines

7
推荐指数
1
解决办法
256
查看次数

python在读取文件时枚举tqdm bar?

当我使用此代码迭代打开的文件时,我看不到tqdm进度条:

        with open(file_path, 'r') as f:
        for i, line in enumerate(tqdm(f)):
            if i >= start and i <= end:
                print("line #: %s" % i)
                for i in tqdm(range(0, line_size, batch_size)):
                    # pause if find a file naed pause at the currend dir
                    re_batch = {}
                    for j in range(batch_size):
                        re_batch[j] = re.search(line, last_span)
Run Code Online (Sandbox Code Playgroud)

什么是在这里使用tqdm的正确方法?

python enumerate tqdm

7
推荐指数
4
解决办法
9394
查看次数

Ruby从大范围获得第n项

假设我有这个范围:

("aaaaa".."zzzzz")
Run Code Online (Sandbox Code Playgroud)

如何在不事先产生整个事物的情况下从范围中获取第N个项目/每次?

ruby enumerate range

6
推荐指数
2
解决办法
1217
查看次数

列出给定大小的向量的所有子集

该函数choose(n,k)告诉我们k一组n不同元素存在多少个大小子集.假设我需要实际列出这些子集,我是如何创建它的?换句话说,我正在寻找一个接受矢量x(长度n)和数字的函数,k并返回一个矢量列表,每个矢量的大小k,子集的子集x.当然,列表的长度应该是choose(length(x),k).例如

enum.choose = function(x,k) {
    # implementation should go here
{

enum.choose(1:3,2)

# should be:
# [[1]]
#    1  2
# [[2]]
#    1  3
# [[3]]
#    2  3
Run Code Online (Sandbox Code Playgroud)

r list enumerate subset

6
推荐指数
1
解决办法
5941
查看次数

如何迭代 azure.core.paging.ItemPaged?

我有一个迭代器对象<iterator object azure.core.paging.ItemPaged at 0x7fdb309c02b0>。当我第一次迭代它时(参见下面的代码),它会打印结果。但是,当我第二次执行此代码时,它什么也不打印。

for i, r in enumerate(result):
   print(r)
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?我需要以某种方式重置枚举器吗?

python enums iterator enumerate azure

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