如何使用Array.Find将以下内容转换为VB.NET谓词?
Private Function FindCulture(ByVal Code As String) As Globalization.CultureInfo
'
Dim AllCultures As Globalization.CultureInfo() = Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)
'
For Each Culture As Globalization.CultureInfo In AllCultures
If Culture.TwoLetterISOLanguageName = Code Then
Return Culture
End If
Next
'
Return Nothing
'
End Function
Run Code Online (Sandbox Code Playgroud) 我有一个类:
public class Observation {
private String time;
private double x;
private double y;
//Constructors + Setters + Getters
}
Run Code Online (Sandbox Code Playgroud)
我可以选择将这些对象存储在任何类型的集合中(标准类或第三方,如Guava).我已经在下面的ArrayList中存储了一些示例数据,但就像我说的那样,我对任何其他类型的集合都是开放的.所以,一些示例数据:
ArrayList<Observation> ol = new ArrayList<Observation>();
ol.add(new Observation("08:01:23",2.87,3.23));
ol.add(new Observation("08:01:27",2.96,3.17));
ol.add(new Observation("08:01:27",2.93,3.20));
ol.add(new Observation("08:01:28",2.93,3.21));
ol.add(new Observation("08:01:30",2.91,3.23));
Run Code Online (Sandbox Code Playgroud)
该示例假定匹配的构造函数Observation.时间戳存储为String对象,因为我从外部源接收它们,但我很乐意将它们转换为其他内容.我按时间顺序接收观察结果,因此我可以创建并依赖于有序的观察集合.时间戳不是唯一的(如示例数据中所示),因此我无法基于创建唯一键time.
现在来问题了.我经常需要找到一个time等于或接近一定时间的一(1)个观测值,例如,如果我的时间是08:01:29我想在示例数据中获取第四个观测值,并且如果时间是08:01:27我想要第三个观测值.
我显然可以遍历整个集合,直到找到我正在寻找的时间,但我需要经常这样做,并且在一天结束时我可能有数百万的观察,所以我需要找到一个解决方案,我可以找到有效的相关观察.
我已经查看了各种集合类型,包括我可以过滤集合的类型,Predicates但是我找不到可以返回一个值的解决方案,而不是满足"<="条件的集合的子集.我基本上是在寻找SQL的等价物SELECT * FROM ol WHERE time <= t LIMIT 1.
我相信有一个聪明而简单的方法来解决我的问题所以我希望能够开悟.先感谢您.
我想制作一个这样的方法,
public dynamic Traverse(dynamic entity, conditions, method)
{
foreach (var propInfo in GetTraversableProperties(entity))
{
if (condition) method(propInfo.GetValue(etc));
Traverse(propInfo, condition, method);
}
return entity;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?将条件和方法作为参数传递的语法是什么?另外,使条件成为方法并检查它的返回值更有意义吗?
您好我有2个包含相同对象的列表.我想通过使用谓词执行任何操作,如intercesct,union,distinct,因为我无法使用equals来进行比较.
例:
class Car{
public String id;
public String color;
public int hashcode(){
//id field is used for hashcode
}
public boolean equals(){
//id field is used for equals
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个汽车清单.我需要在这个列表中找到重复项,但不能仅通过颜色找到id.
List<Car> carList1 = new ArrayList(){ new Car(1,blue), new Car(2,green)};
List<Car> carList2 = new ArrayList(){ new Car(1,silver), new Car(4,green)};
Run Code Online (Sandbox Code Playgroud)
我需要从carList1找到第二个对象(新车(2,绿色))
列出类似的东西
Collection.intersect(carList1,carList2,comparator).
Run Code Online (Sandbox Code Playgroud)
在C#中我会用它来LINQ.
我想知道是否有任何方法可以转换Predicate为String.例如,将有一个功能:
public static <T> String convertPredicate(Predicate<T> objPredicate) {
return ?...
}
Run Code Online (Sandbox Code Playgroud)
以便以下调用将返回(obj) -> obj.value== 1:
convertPredicate((obj) -> obj.value== 1)
Run Code Online (Sandbox Code Playgroud) 此代码有效:
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> > pq;
pq.push(1);
cout<<pq.top()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码无法编译:
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int>() > pq;
pq.push(1);
cout<<pq.top()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么?
我所了解的是,它greater<int>() 是一个函数对象,并且priority_queue接受二进制谓词作为第三个参数,并且谓词是一种特殊的函子类型。但是这对大括号如何使这一点有所不同。
我有一个名字列表。在第 3 行,我必须将 lambda 表达式的结果转换为Predicate<String>. 我正在阅读的书解释说,为了帮助编译器确定匹配的功能接口是什么,强制转换是必要的。
但是,我不需要在下一行进行这样的演员表,因为我不调用negate(). 这有何不同?我知道negate()这里返回了Predicate<String>,但是前面的 lambda 表达式不一样吗?
List<String> names = new ArrayList<>();
//add various names here
names.removeIf(((Predicate<String>) str -> str.length() <= 5).negate()); //cast required
names.removeIf(((str -> str.length() <= 5))); //compiles without cast
Run Code Online (Sandbox Code Playgroud) 使用这样的动态导入:
\nconst i = import('./path/to/module.js');\nRun Code Online (Sandbox Code Playgroud)\n为该模块生成一个 Promise。假如说./path/to/module.js看起来像这样:
export function foo () {}\nexport function bar () {}\nexport default function () {}\nRun Code Online (Sandbox Code Playgroud)\n生成的对象将具有这样的形状:
\n{\n foo: \xe2\x80\xa6\n bar: \xe2\x80\xa6\n default: \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n现在我需要弄清楚给定的对象是否是这样的模块,或者任何其他模块。那么:是否有任何测试来确定给定对象是否是通过动态导入获得的 es6 模块?
\n假设countMe是一个全局变量,并且我同时向这个 while 循环启动 10 个线程,变量countMe互斥体是否在谓词中受保护?我认为因为当代码到达 wait_for 时它会解锁并释放锁,因此变量 countMe 不受互斥保护。我对吗?
while (true)
{
std::unique_lock<std::mutex> lock(mtx_kill);
cv_kill.wait_for(lock, 500ms, [&]() {++countMe; return killFlag; });
if (killFlag)
{
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 and/or 组合该类型的多个谓词。以前使用 CoreData 和 NSPredicate 我只会这样做:
let predicate = NSPredicate(value: true)
let predicate2 = NSPredicate(value: false)
let combinedPred = NSCompoundPredicate(type: .or, subpredicates: [predicate, predicate2])
Run Code Online (Sandbox Code Playgroud)
是否有类似的方法可以使用 SwiftData 和 #Predicate 来做到这一点?如果没有,我如何实现一种预先创建部分条件并稍后将它们组合到谓词中的方法?
我发现将其作为表达式执行此操作的唯一方法是这样的,但这将使我的谓词长数百行
let includeOnlyFavorites = true
#Predicate { includeOnlyFavorites ? $0.isFavorite : true }
Run Code Online (Sandbox Code Playgroud)
我正在开发一个应用程序,允许用户使用快捷操作保存和查询项目。这些项目使用 SwiftData 存储并使用 EntityPropertyQuery 查询
Apple 是这样实现 Query 属性的:
static var properties = QueryProperties {
Property(\BookEntity.$title) {
EqualToComparator { NSPredicate(format: "title = %@", $0) }
ContainsComparator { NSPredicate(format: "title CONTAINS %@", $0) }
}
}
Run Code Online (Sandbox Code Playgroud)
然后将谓词与 …
predicate ×10
java ×4
c++ ×2
find ×2
lambda ×2
action ×1
arrays ×1
c# ×1
c#-4.0 ×1
c++11 ×1
collections ×1
ecmascript-6 ×1
es6-modules ×1
functor ×1
javascript ×1
list ×1
methods ×1
mutex ×1
nspredicate ×1
string ×1
swift ×1
swift-data ×1
templates ×1
union ×1
vb.net ×1