将NSDictionary转换为std :: vector

问题描述:

我想将NSDictionary映射整数转换为浮点值,转换为C++ std :: vector,其中原始NSDictionary的键是向量的索引。将NSDictionary转换为std :: vector

我有代码,我认为会工作,但它似乎创建一个向量比字典中键值对的数量更大。我正在猜测它是如何处理我向矢量索引的。

任何帮助非常感谢。

这里是我的代码:

static std::vector<float> convert(NSDictionary* dictionary) 
    { 
     std::vector<float> result(16); 
     NSArray* keys = [dictionary allKeys]; 
     for(id key in keys) 
     {   
      id value = [dictionary objectForKey: key]; 
      float fValue = [value floatValue]; 
      int index = [key intValue]; 
      result.insert(result.begin() + index, fValue); 
     } 
     return result; 
    } 
+3

为什么不使用'std :: map'。它是STD中的NSDictionary的对应物。也许你的键没有排序,你不能在'std :: vector'上任意插入索引。你需要按顺序执行:0,1,2,3 ... –

+1

因为我正在写一个插件,它给了我一个NSDictionary,并且希望将它传递给我使用的API,它需要一个std :: vector – ekj

正在初始化向量与多家生成很多条目开始说起。在这种情况下,您的矢量将以16个元素开始,并且每个插入元素都将添加元素,因此您将以16 + N元素结束。

如果您想将元素更改为新值,只需指定给它。不要使用插入:

result[index] = fValue; 

但是,你真的应该只使用map<int, float>

std::map<int, float> result; 
NSArray* keys = [dictionary allKeys]; 
for(id key in keys) 
{   
    id value = [dictionary objectForKey: key]; 
    float fValue = [value floatValue]; 
    int index = [key intValue]; 
    result[index] = fValue; 
} 
+0

第一个解决方案看起来可能是正确的。我不能使用std :: map,因为我正在编写一个插件,它给了我一个NSDictionary,并且希望将它传递给我正在使用的需要std :: vector的API。 由此,你如何获得代码块的工作? – ekj

+0

@ekj:请问每个问题有一个问题。 –

+0

对不起,我只是想在我的堆栈溢出发帖。但我明白:--D。我是一个n00b这里 – ekj

既然你说你的钥匙应该成为指标到载体中,您可以将您的密钥进行排序。
未经测试的示例:

static std::vector<float> convert(NSDictionary* dictionary) 
{ 
    std::vector<float> result; 
    NSArray* keys = [dictionary allKeys]; 
    result.reserve([keys count]); // since you know the extent 
    for (id key in [keys sortedArrayUsingSelector:@selector(compare:)]) 
    {   
     id value = [dictionary objectForKey:key]; 
     float fValue = [value floatValue]; 
     int index = [key intValue]; 
     result.push_back(fValue); 
    } 
    return result; 
} 
+0

我认为排序是不必要的,如果假设的关键是形成一个连续的集合(如果排序)。我现在的工作方式是初始化vector [键数],然后使用result [index] = fValue – ekj

+0

这可能是一个更有效的实现。但我认为不需要地图,是我的观点。 – Richard