小编Edw*_*ard的帖子

C#集合由属性索引?

我经常遇到的一个问题是需要以这样的方式存储对象集合,以便我可以通过特定的字段/属性来检索它们,该字段/属性是该对象的唯一"索引".例如,我有一个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 …

c# linq collections

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

集合的MVVM

我最近开始学习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包含CustomerViewModelObservableCollection而不是CustomerObservableCollection.这会将模型与视图完全分开.

wpf mvvm

5
推荐指数
1
解决办法
1196
查看次数

A*时间复杂度

维基百科在A*的复杂性上说:

A*的时间复杂度取决于启发式.在最坏的情况下,扩展的节点数在解的长度(最短路径)中是指数的,但是当搜索空间是树时它是多项式的...

我的问题是:"A*的时间复杂度是指数级的吗?还是时间复杂度不是存储复杂性?" 如果是内存复杂性,A*的时间复杂度是多少?

complexity-theory a-star

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

模块比较字符

这似乎是一个非常简单的问题,但是在互联网上关于它的报道却很少,而且我很难自己正确地实现它.在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字母吗?

java math ascii string-comparison

5
推荐指数
1
解决办法
445
查看次数

使用来自 GitHub 项目的特定提交安装 Cordova 插件

我曾经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 安装正确的版本?

git github cordova ionic-framework cordova-plugins

5
推荐指数
0
解决办法
908
查看次数

更新 Ubuntu 18.04 中的 gcc 替代方案 - g++ 不能成为 gcc 的从属

尝试更新替代方案但出现此错误。谷歌搜索没有显示任何解决方案。

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 的从属:它是一个主替代方案

ubuntu gcc g++

5
推荐指数
1
解决办法
4970
查看次数

Eclipse不认为System.exit会中断执行

我发现了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)

java eclipse exception-handling initialization

4
推荐指数
1
解决办法
1123
查看次数

std::function 与虚函数调用用于类型擦除的开销

假设我有一个模板类,它包装其模板参数以提供一些额外的功能,例如将对象的状态保存到磁盘的能力:

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)

使用继承,我将创建一个没有模板参数的抽象类,该抽象类将 …

c++ inheritance std

4
推荐指数
1
解决办法
1853
查看次数

powershell 将 ps1 脚本的输出分配给变量

首先,我对 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)

在这两种情况下,它们都会运行并立即给我值,而不是将其分配给变量。当我调用变量时,我没有得到任何数据。

variables powershell scripting

3
推荐指数
2
解决办法
8224
查看次数

无法将std :: unique_lock移动到结构中

我正在尝试创建一个非常简单的,简单的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)

c++ locking move-semantics c++11

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