标签: generic-collections

C++中的通用容器

我正在尝试创建一个通用容器类型来提供单个公共接口,以及隐藏我正在使用的内部容器,因为它们可能会发生变化.

基本上我有插件返回项目集合,我不希望插件知道我的代码使用的容器类型.

任何人都能指出我比下面的示例代码更好的方向吗?

template<class C, typename I>
class Container
{
 public:
 //...

    void push(const I& item)
    {
        if(typeid(C) == typeid(std::priority_queue<I>))
        {
           std::priority_queue<I>* container = (std::priority_queue<I>*)&_container;
           container->push(item);
        }
        if(typeid(C) == typeid(std::list<I>))
        {
           std::list<I>* container = (std::list<I>*)&_container;
           container->push_back(item);
        }
        else
        {
           //error!
        }
     };

  private:
     C _container;
 //...
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ stl generic-collections

10
推荐指数
1
解决办法
4492
查看次数

多键DataStructure

我正在寻找一个可以用多个键搜索的数据结构.用例子更容易解释:

var myDataStructure = new MultiKeyDataStructure<int, string, MyType>();
myDataStructure.Add(1, "some string 1", new MyType());
myDataStructure.Add(2, "some string 2", new MyType());

var myType = new MyType();
myDataStructure.Add(3, "some string 3", myType);

Tuple<string, MyType> t1 = myDataStructure[1];
Tuple<int, MyType> t2 = myDataStructure["some string 1"];
Tuple<int, string> t3 = myDataStructure[myType];
Run Code Online (Sandbox Code Playgroud)

这样的事情是可能的,如果是这样的话,还有什么东西可以做到吗?你会如何实现像键一样对待所有东西的东西,并通过搜索它们中的任何一个来返回所有相关的键?

理想情况下,您还可以使用任何数量和/或类型的参数:

var myDataStructure = new MultiKeyDataStructure<int, string, Foo, Bar>();
Run Code Online (Sandbox Code Playgroud)

c# generics dictionary generic-collections

10
推荐指数
1
解决办法
2899
查看次数

C#:'IEnumerable <Student>'不包含'Intersect'的定义

我写了一行代码已经很久了,所以,如果我问一个愚蠢的问题,请耐心等待.

尽管IntelliSense在Names之后显示了Intersect方法,但在尝试比较两个IEnumerables时出现以下错误.

我试图比较数据库查询的结果与html中的有序列表.

'IEnumerable'不包含'Intersect'的定义,并且最好的扩展方法重载'Queryable.Intersect(IQueryable,IEnumerable)'需要'IQueryable'类型的接收器

namespace Data.Repositories
{
    public class StudentsRepository
    {
        public class Student
        { 
            public string FullName { get; set; }
        }

        public static IEnumerable<Student> GetData(string CardNumber, string Section)
        {
            // FullName varchar(300) in Database
            return CommonFunctions.ExecuteReader1<Student>(QryStudentSectionDetails(CardNumber, Section)).AsQueryable();
        }
    }
}


namespace Tests.ActionsLibrary.StudentPaper
{
    public class StudentActions:TestBase
    {
        bool IsMatch = false;

        // Get Names from DataBase
        IEnumerable<Student> Names = GetData(CardNumber, Section);

        // Get Names from Ordered list in HTML
        IEnumerable<IWebElement> OrderedList = driver.FindElements(By.XPath("//li[@ng-repeat='Names']"));

        if (Names.Count() == OrderedList.Count() && …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable generic-collections

9
推荐指数
1
解决办法
5783
查看次数

是否存在具有键/值对的通用集合,其中键可以多次出现?

我想使用类似的泛型集合Dictionary,但Dictionary要求每个键都是唯一的.我有相同"密钥"的多个值,所以我需要一个允许的通用集合.

我意识到这使得钥匙不再是钥匙,但我不知道还有什么可以称之为钥匙.

.net dictionary generic-collections

8
推荐指数
2
解决办法
5218
查看次数

列表界面:从Java到C#

这些天我是一名学习C#的Java程序员.

通常在Java中使用列表时,它应该是针对其接口的优先编程,以便在实现之间切换:

List<Object> list = new ArrayList<Object>();
//or
list = new LinkedList<Object>(); 
Run Code Online (Sandbox Code Playgroud)

C#怎么样?是否存在类似的方法?有人能告诉我一个例子吗?从现在开始我以这种方式构建一个列表,但我不认为List是一个接口:

List<int> list = new List<int>();
list.Add(2);
Run Code Online (Sandbox Code Playgroud)

c# java interface list generic-collections

8
推荐指数
1
解决办法
2326
查看次数

避免返回通配符类型

我有一个带有通配符类型集合的类,它是一个单例,类似于:

public ObliviousClass{

    private static final ObliviousClass INSTANCE = new ObliviousClass();

    private Map<Key, Type<?>> map = new HashMap<Key, Type<?>>();

    public void putType(Key key, Type<?> type){
        map.put(type);
    }

    // returns the singleton
    public static ObliviousClass getInstance(){
        return INSTANCE;
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望能够在客户端代码中为此集合添加不同的参数化类型:

void clientMethod(){
    ObliviousClass oc = ObliviousClass.getInstance();

    Type<Integer> intType = ...
    Type<String> stringType = ...

    oc.putType(new Key(0), intType);
    oc.putType(new Key(1), stringType);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,据我所知,一切都很好.但是客户还需要能够获得Type<?>提供的服务Key.因此,将添加以下类似的方法ObliviousClass:

public Type<?> getType(Key key){
    return map.get(key);
}
Run Code Online (Sandbox Code Playgroud)

但是在我有用的Java副本中,我读到:

不要将通配符类型用作返回类型.

我理解这个问题,因为客户端必须抛出返回的内容 …

java generics wildcard generic-collections

8
推荐指数
1
解决办法
9587
查看次数

将Dictionary转换为结构化格式字符串

我有一个声明为的Dictionary对象var as Dictionary(of String, String).

我正在尝试使用Generic Collection可用的LINQ扩展,但我只获取非扩展方法.

我需要将Dictionary集合转换为具有以下模式的字符串: key1=val1, key2=val2, ..., keyn=valn

首先做一个foreach循环的想法会到达现场,除了我是程序员阻塞的事实.

到目前为止我所拥有的,但怀疑它是产生这个的最佳逻辑模式:

Public Overrides Function ToString() As String
    Dim ret As String = ""
    For Each kv As KeyValuePair(Of String, String) In Me._set
        If ret <> String.Empty Then
            ret &= ", "
        End If

        ret &= String.Format("{0}={1}", kv.Key, kv.Value)
    Next

    Return ret
End Function
Run Code Online (Sandbox Code Playgroud)

由于某种原因,即使我已将System.Core&System.Linq库导入项目,也没有任何扩展的LINQ扩展出现在我的dev-env intellisense中.所以现在,除非有人可以帮助我在Intellisense中显示LINQ扩展,否则它们是不可能的.

发现LINQ扩展没有出现的问题,所以他们回到了桌子上;)

vb.net collections .net-4.0 generic-collections

8
推荐指数
2
解决办法
8802
查看次数

无法更改泛型集合中struct的成员值

想象一下struct:

        struct Person
        {
             public string FirstName { get; set; }
             public string LastName { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

以下代码:

        var list = new List<Person>();
        list.Add(new Person { FirstName = "F1", LastName = "L1" });
        list.Add(new Person { FirstName = "F2", LastName = "L2" });
        list.Add(new Person { FirstName = "F3", LastName = "L3" });

        // Can't modify the expression because it's not a variable
        list[1].FirstName = "F22";
Run Code Online (Sandbox Code Playgroud)

当我想要更改Property它的值时,它会给我以下错误:

Can't modify the expression because it's not …
Run Code Online (Sandbox Code Playgroud)

.net c# struct generic-list generic-collections

8
推荐指数
2
解决办法
5427
查看次数

IEnumerable <T> .Reverse&List <T> .Reverse之间的区别

为什么IEnumerable<T>.Reverse()返回带有原始集合的List<T>反转集合并反转原始集合本身?这对我来说有点困惑,因为List<T>继承自IEnumerable<T>.

c# generic-collections

8
推荐指数
2
解决办法
2091
查看次数

在TypeScript中映射通用的spreaded参数类型

我正在尝试编写一个泛型方法,该方法接受任意数量的参数作为对象的键,并使用其键的值作为构造函数的参数.这是我最初的实现:

// Typescript 2.x
export function oldMethod<TProps>() {
  function create<
    TInstance extends Geometry | BufferGeometry,
  >(
    geometryClass: new () => TInstance,
  ): any;
  function create<
    TInstance extends Geometry | BufferGeometry,
    TKey1 extends Extract<keyof TProps, string>,
  >(
    geometryClass: new (param1: TProps[TKey1]) => TInstance,
    key1: TKey1,
  ): any;
  function create<
    TInstance extends Geometry | BufferGeometry,
    TKey1 extends Extract<keyof TProps, string>,
    TKey2 extends Extract<keyof TProps, string>,
  >(
    geometryClass: new (param1: TProps[TKey1], param2: TProps[TKey2]) => TInstance,
    key1: TKey1,
    key2: TKey2,
  ): any;
  function create< …
Run Code Online (Sandbox Code Playgroud)

generic-collections typescript

8
推荐指数
1
解决办法
389
查看次数