- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先,这是用于模式匹配的,所以请记住这一点,因为您可能有完全不同的解决方案,我想听听。
我有这一系列数据(暂时称它为 mystring)。
string a = get_starting_letters(mystring)
string b = get_ending_letters(mystring)
bool c = check_code_appears(mystring)
.
.
.
and so on
我想要一个像这样工作的字典/真值表(* 表示通配符)。
key (a,b,c...) value
"abc", *, True = "type a string"
"abc", "xyz", True = "type b string"
*, "xyz", True = "type m string"
这如何在 C# 中实现?我知道这对于 F# 来说是微不足道的,但是将来可能会由只懂 C# 的人更新此代码。
我为什么要这样做?因为当前的代码越来越难以遵循和更新(太多嵌套的 if、else、else if)并且到目前为止只描述了几个“类型”(它会在几个月内翻一番)。
我一直在考虑的其他解决方案:一种描述由条件检查的不同可能变量的树/结构:
b = "xyz"
a = "abc" <
mystring < b = "xxx"
a = "cda" <
b = *
然而,它似乎会有很大的开销,速度对此很重要,此外树不会是二进制的,也需要处理通配符。
最佳答案
如果你只需要检查一个给定的元组是否匹配给定的类型,那么你可以只使用一个普通的字典,比如
Dictionary<string, Tuple<string, string, bool>> lookup = new Dictionary<string, Tuple<string, string, bool>>();
//add some values
lookup["type a string"] = new Tuple<string, string, bool>("abc", null, true);
lookup["type b string"] = new Tuple<string, string, bool>("abc", "xyz", true);
lookup["type m string"] = new Tuple<string, string, bool>(null, "xyz", true);
然后您只需查找要检查匹配的类型,看看值是否相等(或者元组中是否有空值)。
如果您需要能够确定哪些类型与字符串匹配(并且不想遍历已知类型),那么显然这种方法行不通。 .但您还需要建立某种优先规则...
更新:一种方法是使用 SQL 并添加一些索引(如果您不想编写自己的基于 B 树的索引)。是的,它是基于磁盘的,但如果您经常引用它,该表可能会被缓存,如果您不这样做,就没有理由担心性能。
一个更简单的想法是使用排序集。内存效率不是很高,但可能足够快,具体取决于您的规则设置方式。您将为每个字段的每个可能值构建一个集合,其中包含类型字符串。例如,你有一个集合,其中 a="abc"有两个成员,"type a string"和 "type b string",还有一个集合 a=*,只有一个成员,"输入 m 字符串”。
如果您试图找到与 a="abc"、b="xxx"和 c=true 的字符串相匹配的值,您将取 a="abc"和 a= 的交集* 集,将其与 b="xxx"和 b= 的并集相交,然后将其与 c=true 和 c= 的并集相交。然后,您将拥有一组与您的键匹配的值。
它将在 O([a="abc"] + [a=*] + [b="xxx"] + [b=*] + [c=true] + [c=*]) = O(n)
当然,迭代所有规则以检查匹配项的时间复杂度为 O(n),但在这里我们大幅减少了 n 的大小。
关于c# - 带通配符的真值表(ish),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977785/
我想实现一个可以按颜色过滤图像的搜索。我的图像模型包含多达 10 个出现在该特定图像中的 UIColors,现在我想要一个过滤器,例如蓝色,绿色,红色,黄色。我如何检查(以指定的容差)该特定图像是否包
问题 Git 中 commit-ish 和 tree-ish 的具体例子是什么? Stack Overflow 问题 "What does tree-ish mean in git?" deals与
如果我需要,比如说,在 asm.js 模块中找到一个数字的整数部分和小数部分,我该怎么做?没有standard operators在 intish 和 doubleish 类型之间转换;即使 Math
我拥有的是一组用户和一组网络,这些用户需要在各种网络上拥有不同的电子邮件地址——有些是内部的,有些是外部的,有些是开发的,而且他们都有自己的命名& 寻址方案。 到目前为止,我所拥有的是简化的,删除了无
我有一个使用 jquery 的 javascript 函数: my.namespace.loadSomeStuff = function() { $.get('/Services/loadSt
首先,这是用于模式匹配的,所以请记住这一点,因为您可能有完全不同的解决方案,我想听听。 我有这一系列数据(暂时称它为 mystring)。 string a = get_starting_letter
我正在尝试在 P5js 中编写一个小型图形可视化工具,但我找不到可遵循的简单(-ish)算法。 我已经找到了使用 D3 来完成此操作的方法,并且我发现了一些密集的教科书片段(如 this ),但我正在
我正在尝试在 P5js 中编写一个小型图形可视化工具,但我找不到可遵循的简单(-ish)算法。 我已经找到了使用 D3 来完成此操作的方法,并且我发现了一些密集的教科书片段(如 this ),但我正在
public static boolean Xish 此方法应按以下顺序接受两个参数:要检查的单词的字符串和由要检查的字母组成的字符串。例如,如果一个单词以任意顺序包含字母 e、l 和 f,则该单词被
整个早上我都在用这个代码撞墙,最后决定来这里寻求帮助。 我有以下标记。 Summary THIS IS AN IMAGE "> 以及下面的 Jquery。 $(".cs").live('click',
所以我正在做一些关于回调函数的练习,我想自己尝试一下,并将它与 setTimeout 方法一起使用,令我惊讶的是,它没有按预期工作。请问我做错了什么在这里。 function first(number
我需要创建可以手动填写并以数字方式阅读的表格。我计划使用一种带有行和列的 scantron 式格式,用户只需在相应单元格的圆圈中着色,计算机就会根据单元格矩阵中的 xy 位置知道该值。就像一个exce
我正在尝试编写一个程序,作为其功能的一部分,它会连续捕获视频并实时或尽可能接近实时地计算给定帧的视频数据的平均亮度。这是我第一次涉足任何视频东西/iOS 相机东西,所以除了我自己的东西之外,我有点把我
我在 mySQL 数据库中有下表(注意:这些是总结的,因此它们与这个问题相关,一些列已被省略)。 author (id, username, password etc.) thread (id, ti
由于我无法控制的原因,我必须将带有一些 Unicode 字符的(英语)文本转换为 ASCII(以便在别处进一步处理)。例如: Deutsche Börse 当我这样做时: u'Deutsche Bör
我不断使用以下代码进行 segmentation 。将 4000 更改为 1000 可使代码运行良好。我会认为我这里有足够的内存...我该如何解决这个问题? #include #include #
我有一个对象列表,我想以随机顺序连续访问这些对象。 我想知道是否有一种方法可以确保随机值并不总是相似。 例子。 我的列表是队列列表,我试图交错这些值以生成用于测试的真实场景。 我并不是特别想要队列 1
我有一种情况需要优化无序集的创建。预期的元素数量约为 5-25M。我的第一个想法是我应该事先准备好所有数据并做一些类似的事情 unordered_set s(data); 代替 for (auto&
我有一个使用大图像作为背景的网站。这是一个大小为 134KB 的 jpeg - 到目前为止我真的无法得到它。我已经在低质量 jpeg 设置的 photoshop 中将其保存为网络。它的尺寸是:1920
在数组中的相同索引位置使用来自多个数组的参数创建类的新实例的“ruby-ish”方法是什么? 例如,我目前在做: array1.each_with_index { |element, i|
我是一名优秀的程序员,十分优秀!