我经常遇到的一个问题是需要以这样的方式存储对象集合,以便我可以通过特定的字段/属性来检索它们,该字段/属性是该对象的唯一"索引".例如,我有一个Person对象,其name字段是唯一标识符,我希望能够从一些Person对象集合中检索Person其中name="Sax Russell".在Java中,我通常通过使用Map我真正想要的地方来实现这一点Set,并且总是使用对象的"索引"字段作为地图中的键,即peopleMap.add(myPerson.getName(), myPerson).我想在C#中用Dictionarys 做同样的事情,像这样:
class Person {
public string Name {get; set;}
public int Age {get; set;}
//...
}
Dictionary<string, Person> PersonProducerMethod() {
Dictionary<string, Person> people = new Dictionary<string, Person>();
//somehow produce Person instances...
people.add(myPerson.Name, myPerson);
//...
return people;
}
void PersonConsumerMethod(Dictionary<string, Person> people, List<string> names) {
foreach(var name in names) {
person = people[name];
//process person somehow...
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这看起来很笨拙,并且在Dictionary …
我最近开始学习wpf并尝试使用mvvm.
我的理解是,在mvvm中,视图或模型都不应该知道另一个存在.
我要做的是在屏幕上显示客户列表.但是如果我对viewModel进行编码,如下所示.这与我在网上看到的许多例子类似,然后我最终得到了一些看起来像这样的代码
class Customer
{
public String Name {get;set;}
public String Address {get;set;} }
}
class MainWindowViewModel
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
public ObservableCollection<Customer> Customer
{
get {return customers;}
}
public MainWindowViewModel()
{
//cust1 and cust2 are Customer objets
customers.Add(cust1);
customers.Add(cust2);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我创建一个MainWindowViewModel的实例并将其设置为我的MainWindowView(我的视图)的datacontext,并且我进一步将viewmodels Customers属性绑定到listBox,那么视图将需要对包含我的Models的程序集的引用.
所以我的问题是.
1)在MVVM中添加对允许的模型程序集的引用,因为这意味着视图知道模型.
2)更好的解决方案是将每个Customer对象包装在CustomerViewModel中,并让MainWindowViewModel包含CustomerViewModel 的ObservableCollection而不是Customer的ObservableCollection.这会将模型与视图完全分开.
维基百科在A*的复杂性上说:
A*的时间复杂度取决于启发式.在最坏的情况下,扩展的节点数在解的长度(最短路径)中是指数的,但是当搜索空间是树时它是多项式的...
我的问题是:"A*的时间复杂度是指数级的吗?还是时间复杂度不是存储复杂性?" 如果是内存复杂性,A*的时间复杂度是多少?
这似乎是一个非常简单的问题,但是在互联网上关于它的报道却很少,而且我很难自己正确地实现它.在Java中对ASCII字符实现模块化比较函数的最佳方法是什么,这样比较"包围"字母表的结尾?我想将它用于可以在任意位置对整个字母进行分区的"between"函数,并在被询问'y'是否在'x'和'b'之间时正确返回"true".
我已经找到了所有关于字符模块化算术的问题和答案,所以我知道如何使用这样的代码进行模块化添加(字符移位):
char shifted = (((original - 'a') + 1) % 26) + 'a';
Run Code Online (Sandbox Code Playgroud)
但是,这是基于Java内置的模块化算术函数,它们没有等效的比较.即使我使用普通的int,我也无法询问Java是否<b <c mod 26(如果a = 24,b = 25,c = 1则应该返回true).
所以一般的问题是,在Java中实现模块化比较操作的最佳方法是什么?如果这个问题太难了,那么至少有一种方法可以让这种比较适用于ASCII字母吗?
我曾经cordova plugin add https://github.com/photomania/cordova-plugin-camera.git在我的 Ionic 项目中添加一个 Cordova 插件。
现在我需要这个固定版本:https : //github.com/photomania/cordova-plugin-camera/commit/cbb3e5011bb04245b421ba6cd9ad456904bf7ef9
我已经试过了 cordova plugin add https://github.com/photomania/cordova-plugin-camera#cbb3e5011bb04245b421ba6cd9ad456904bf7ef9
但它返回了错误:
fatal: reference is not a tree: cbb3e5011bb04245b421ba6cd9ad456904bf7ef9`
Run Code Online (Sandbox Code Playgroud)
如何从 GitHub 安装正确的版本?
尝试更新替代方案但出现此错误。谷歌搜索没有显示任何解决方案。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
update-alternatives:错误:替代 g++ 不能成为 gcc 的从属:它是一个主替代方案
我发现了Eclipse报告"局部变量可能尚未初始化"错误的方式的奇怪二分法.如果我在try/catch块之外声明一个变量,在try/catch块中初始化它,然后在try/catch块之后使用它,则通常会发生此错误:
Random r;
try {
r = new AESCounterRNG();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
r.nextInt(); //Error: The local variable r may not have been initialized
Run Code Online (Sandbox Code Playgroud)
这是有道理的.我可以通过null在我声明它时将变量初始化来避免错误,或者通过确保在try/catch块内发生异常时程序的控制流永远不会到达下一个语句.因此,如果变量初始化失败,我真的无法继续执行,我可以这样做:
Random r;
try {
r = new AESCounterRNG();
} catch (GeneralSecurityException e) {
throw new RuntimeException("Initialize secure random number generator failed");
}
r.nextInt(); //No error here
Run Code Online (Sandbox Code Playgroud)
但是,我最近尝试使用System.exit停止程序而不是RuntimeException使程序的控制台输出更清洁.我认为这些是等价的,因为两者都阻止程序继续执行,但我发现Eclipse不同意:
Random r;
try {
r = new AESCounterRNG();
} catch (GeneralSecurityException e) {
System.err.println("Couldn't initialize secure random …Run Code Online (Sandbox Code Playgroud) 假设我有一个模板类,它包装其模板参数以提供一些额外的功能,例如将对象的状态保存到磁盘的能力:
template<typename T>
class Persistent {
std::unique_ptr<T> wrapped_obj;
public:
Persistent(std::unique_ptr<T> obj_to_wrap);
void take_snapshot(int version);
void save(int to_version);
void load(int to_version);
}
Run Code Online (Sandbox Code Playgroud)
我想要另一个类,我们将其称为 PersistentManager,存储这些模板化持久对象的列表,并在不知道其模板参数的情况下调用它们的成员方法。我可以看到有两种方法可以做到这一点:使用 std::function 从每个方法中删除模板类型,或者使用抽象基类和虚函数调用。
使用 std::function,每个持久对象都能够返回绑定到其成员的一组 std::functions:
struct PersistentAPI {
std::function<void(int)> take_snapshot;
std::function<void(int)> save;
std::function<void(int)> load;
}
template<typename T>
PersistentAPI Persistent<T>::make_api() {
using namespace std::placeholders;
return {std::bind(&Persistent<T>::take_snapshot, this, _1),
std::bind(&Persistent<T>::save, this, _1),
std::bind(&Persistent<T>::load, this, _1)}
}
Run Code Online (Sandbox Code Playgroud)
然后 PersistentManager 可以存储一个PersistentAPIs 列表,并有一个像这样的方法:
void PersistentManager::save_all(int version) {
for(PersistentAPI& bundle : persistents) {
bundle.save(version);
}
}
Run Code Online (Sandbox Code Playgroud)
使用继承,我将创建一个没有模板参数的抽象类,该抽象类将 …
首先,我对 powershell 和编程非常陌生。我有一个 powershell 脚本,它接受一些参数并输出一个值。脚本的结果将类似于 9/10,其中 9 将是节点总数中活动的数量。我想将输出分配给一个变量,这样我就可以根据该值调用另一个脚本。
这是我尝试过的,但不起作用:
$active = (./MyScript.ps1 lb uid **** site)
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下似乎将变量分配给空字符串的方法
$active = (./MyScript.ps1 lb uid **** site | out-string)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它们都会运行并立即给我值,而不是将其分配给变量。当我调用变量时,我没有得到任何数据。
我正在尝试创建一个非常简单的,简单的C++类来实现一个线程安全的列表,即在您访问它时自动锁定的列表.不幸的是,编译器不希望允许我创建并返回包含a的结构unique_lock.这是我最初尝试过的:
template<typename T>
struct LockedQueue {
private:
std::mutex mutex;
using lock_t = std::unique_lock<std::mutex>;
std::list<T> underlying_list;
public:
struct LockedListAccess {
private:
lock_t lock;
public:
std::list<T> &access;
};
LockedListAccess locked() {
return LockedListAccess{ lock_t{mutex}, underlying_list };
}
};
Run Code Online (Sandbox Code Playgroud)
这失败了
no matching function for call to ‘LockedQueue<tcp::socket>::LockedListAccess::LockedListAccess(<brace-enclosed initializer list>)
Run Code Online (Sandbox Code Playgroud)
我猜这意味着大括号初始化器列表/ C++ 11统一初始化结构不适用于仅移动类型,如std :: unique_lock.所以我尝试为我的struct创建一个显式构造函数,它将unique_lock作为右值引用,并将其移动到成员中:
template<typename T>
struct LockedQueue {
private:
std::mutex mutex;
using lock_t = std::unique_lock<std::mutex>;
std::list<T> underlying_list;
public:
struct LockedListAccess {
private:
lock_t lock;
public:
std::list<T> &access;
LockedListAccess(lock_t&& l, std::list<T>& …Run Code Online (Sandbox Code Playgroud)