我想用Java计算一组字符串的哈希值.是的我可以对字符串进行排序并使用计算MD5哈希迭代digest.update.但我宁愿省略排序并使用类似combineUnordered https://github.com/google/guava/wiki/HashingExplained的内容
有很多类似的问题要求相同的顺序,例如顺序独立的哈希算法,
但它们没有提供一个简单的例子,展示了如何在Java中计算迭代的顺序无关散列.
从这里的讨论中我了解到,字典一般不是有序的,至少不是以可靠的方式.那么为什么字典方法keys(),values(),items()返回有序列表而不是例如无序集?这只是为了方便还是有一些潜在的推理?
我有以下HTML:
<li>
<a class="meuble-tab" href="#">Meuble</a>
</li>
Run Code Online (Sandbox Code Playgroud)
我需要实现以下目标:
<li class="active">
<a class="meuble-tab" href="#">Meuble</a>
</li>
Run Code Online (Sandbox Code Playgroud)
使用Jquery我正处于可以进入的地步
$( "MEUBLE标签")
如何让其父"li"执行addClass("active")?
我目前有一个枚举定义如下:
public enum ColorEnum { Red, White, Blue, Green };
Run Code Online (Sandbox Code Playgroud)
这些枚举值中的每一个都有一个我需要能够返回给用户的基础int值.为此,我编写了一个函数,它接受枚举并返回一个int:
public int colorToValue(ColorEnum color)
{
switch (color)
{
case Red:
return 5;
case White:
return 10;
case Blue:
return 15;
case Green:
return 20;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这很好用但是我想知道我是否可以通过使用枚举本身来存储底层值来简化事情.例如,我可以按如下方式定义枚举:
public enum ColorEnum { Red = 5, White = 10, Blue = 15, Green = 20 };
Run Code Online (Sandbox Code Playgroud)
然后将枚举转换为它的基础值就像将其转换为int一样简单.上述功能简化为以下内容:
public int colorToValue(ColorEnum color)
{
return (int)color;
} …Run Code Online (Sandbox Code Playgroud) 请链接我回答如果已经回答,我的问题是我想获得多级json的差异,这是无序的.
x=json.loads('''[{"y":2,"x":1},{"x":3,"y":4}]''')
y=json.loads('''[{"x":1,"y":2},{"x":3,"y":4}]''')
z=json.loads('''[{"x":3,"y":4},{"x":1,"y":2}]''')
import json_tools as jt
import json_delta as jd
print jt.diff(y,z)
print jd.diff(y,z)
print y==z
print x==y
Run Code Online (Sandbox Code Playgroud)
输出是
[{'prev': 2, 'value': 4, 'replace': u'/0/y'}, {'prev': 1, 'value': 3, 'replace': u'/0/x'}, {'prev': 4, 'value': 2, 'replace': u'/1/y'}, {'prev': 3, 'value': 1, 'replace': u'/1/x'}]
[[[2], {u'y': 2, u'x': 1}], [[0]]]
False
True
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让y和z相等,或者如果存在实际差异,则取决于JSON的非顺序.
一种无序的词典列表,但我正在寻找一些水平证明的东西,列表/词典的列表/词典......
运行此代码时,结果会按预期更改,因为集合是无序的:
my_set_1 = {'a','b','c',}
print([i for i in my_set_1])
Run Code Online (Sandbox Code Playgroud)
也就是说,多次运行会给出不同的列表,例如
['a', 'c', 'b']
['b', 'a', 'c']
['a', 'c', 'b']
['c', 'b', 'a']
Run Code Online (Sandbox Code Playgroud)
等等
(注意:您可能会获得相同的结果,如果您没有PYTHONHASHSEED=random,请按照注释中的建议.另外,如果您使用控制台进行复制,请确保Rerun每次运行代码时都使用控制台.)
但是,将上面的代码放在for循环中时,结果相当令人惊讶:
for i in range(10):
my_set_1 = {'a','b','c',}
print([i for i in my_set_1])
# Prints:
# ['a', 'c', 'b']
# ['a', 'c', 'b']
# ['a', 'c', 'b']
# ....
Run Code Online (Sandbox Code Playgroud)
for循环的单次运行将打印相同的列表.重新运行for循环可以打印不同的列表(例如['c', 'b', 'a']),但仍然可以打印10次而不更改.
为什么不改变?
我不明白,为什么在最坏的情况下(其中 N 是元素数)有std::unordered_set O(N) 复杂度的擦除方法?标准 (n4296) 说明了所有三个版本的擦除方法在最坏情况下的复杂度为 O(a.size())(a是容器),并且仅使指向已擦除元素的迭代器无效,而不是所有迭代器(即重新散列不t 发生)。即使对于采用一个迭代器参数并且在平均情况下具有恒定复杂性的版本也是如此。我想是因为那抹version 返回一个迭代器到下一个元素,这需要找到擦除元素后的第一个非空桶,它给出了 O(a.bucket_count()) 复杂度,但不是 O(a.size())!元素的数量与桶的数量不成正比。例如:
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
std::unordered_set<int> aSet;
aSet.insert ({125, 126});
aSet.rehash (1000);
cout << aSet.size() << endl;
cout << aSet.bucket_count() << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出是
Size: 2
Bucket count: 1031
Run Code Online (Sandbox Code Playgroud)
一个容器的大小只有2,bucket_count是1031。当erase方法被调用时,它会寻找下一个非空的bucket,可以放在最后,即复杂度是O(a.bucket_count()),但是不是 O(a.size())。标准给出 O(a.size()) 复杂度的原因是什么?
我正在学习 Oracle 的 Stream API Java 1.8 课程,在阅读讲义时偶然发现了这一点:
无序():
– 继承自 BaseStream
– 返回一个无序的流(内部使用)
– 可以提高distinct()和groupingBy()等操作的效率
这是我的问题。无序的属性如何导致更有效的计算distinct()和groupingBy()
我想创建一百万个无序列表,xrange(1, 1000000)例如给我一个有序列表。我想我需要像 xrange 这样的东西,但以无序的方式生成它。我想我可以通过循环random.randint 和一些手动检查来手动生成一个列表,以保证列表中数字的唯一性,但我认为这会很耗时。有任何想法吗?
我试图制作一个有两个项目的有序列表,每个列表下有三个项目,这些项目有项目符号.我的代码没有通过验证,因为它声明元素ul不允许在此上下文中作为元素ol的子元素.但到处看,它说这没关系.这是我的代码
<ol>
<li>First numbered Item</li>
<ul>
<li>one thing</li>
<li>two things</li>
<li>three things</li>
</ul>
<li>Second numbered Item</li>
<ul>
<li>one thing</li>
<li>two things</li>
<li>Three things</li>
</ul>
</ol>
Run Code Online (Sandbox Code Playgroud)
不确定我做错了什么.谢谢你的帮助,先发帖在这里:)
我有一个以整数向量为键的地图。我用值的关键向量初始化地图{1, 2, 3}
typedef std::map<std::vector<int>, std::string> VectorMap;
VectorMap vectorMap;
vectorMap[std::vector<int>{1, 2, 3}] = "test";
Run Code Online (Sandbox Code Playgroud)
然后我使用count方法来显示是否可以通过向量{1, 2, 3}作为关键字找到VectorMap中的条目。
std::cout << "count: " << vectorMap.count(std::vector<int>{1, 2, 3}) << std::endl;
Run Code Online (Sandbox Code Playgroud)
这将返回正确的计数。
数:1
但是我想这样做,所以向量中整数的顺序无关紧要。所以我尝试与上述相同但矢量内容翻转即{3, 2, 1}
std::cout << "count: " << vectorMap.count(std::vector<int>{3, 2, 1}) << std::endl;
Run Code Online (Sandbox Code Playgroud)
这将返回 0 的计数。
计数:0
我想让矢量比较与内容的顺序无关,只要内容相同。
{1, 2, 3} count: 1
{3, 2, 1} count: 1
{1, 2} count: 0
{1, 2, 3, 4} count : 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我应该完全使用不同的容器而不是 std::vector 吗?
所以我知道map1.insert(map2.begin(), map2.end());将把所有元素插入map2到 中map1。
但其中可能map2已经存在一些元素map1。这些元素将不会更新。
e.g. map1 has { 3 : 4, 6 : 7 }
map2 has { 11: 5, 6 : 0 }
Now if I do map1.insert(map2.begin(), map2.end()), I will get
map1 = { 3: 4, 6 : 7, 11 : 5 }
But what I want is
map1 = { 3: 4, 6 : 0, 11 : 5 }
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何函数map1.insert(map2.begin(), map2.end());可以强制更新已经存在的密钥?
更新:我知道可以使用以下方法完成:map1[k] = v …
我想对以下形式的列表进行排序:
['1000-1005', '6767-8787', '88-5607', '600-607', '909-950']
通过“-”符号之前的整数值,并在排序后存储原始索引,所以像这样:
[(2, '88-5607'), (3, '600-607'), (4, '909-950'), (0, '1000-1005'), (1, '6767-8787')]
其中输出列表中的元组包含原始索引位置,后跟排序值
是否有捷径可寻?
如果我想按第一个数字排序而不保存原始索引,则可以这样做:
sorted(list, key=lambda x: int(x.split('-')[0]))
如果我想在提取第一个整数值后保存原始索引,则可以这样做:
sorted(enumerate(list), key=lambda i: i[1])
但组合这些方法是行不通的,因为它们都占用了关键函数定义。
unordered ×13
list ×5
python ×5
c++ ×3
containers ×2
set ×2
stl ×2
c# ×1
c++11 ×1
compare ×1
css ×1
dictionary ×1
diff ×1
distinct ×1
enums ×1
for-loop ×1
grouping ×1
hash ×1
html ×1
java ×1
java-8 ×1
java-stream ×1
jquery ×1
json ×1
python-2.7 ×1
python-3.x ×1
sorting ×1
stdmap ×1
stdvector ×1