javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

Java:用于存储无限游戏世界的坐标图的良好数据结构是什么?

我习惯于使用PHP进行编码,但我并不真正精通Java,这已经有一段时间了。 我希望它是一个相当简单的解决方案,但是我以任何搜索方式都找不到任何好的示例代码,所以这里是:

我正在编写一个游戏,该游戏发生在基于图块的地图上的2d随机生成的无限世界中(挑剔:我知道它不是真正的无限。我只是希望世界会很大)。 map [x] [y]多维数组的通常方法最初是一个基本概念,但是由于Java没有像PHP一样提供非整数(即,负数)数组键恶作剧的方法,因此我无法正确使用(- (x,+ x,-y,+ y)坐标系,带有数组键。

我需要能够在特定的x,y坐标处找到图块上的对象,以及找到某个图块的“相邻图块”。 (如果我可以getObjectAt(x,y),可以得到(x + 1,y),以此类推)

我已经读过关于四叉树和R树等的文章。 这个概念令人兴奋,但是我还没有看到Java中任何好的简单示例实现。 此外,我不太确定那是否是我真正需要的。

欢迎任何建议

谢谢

trans by 2020-07-09T07:42:26Z

从C ++映射中删除键

我想从STL映射中删除密钥。 但是,map.erase()不执行任何操作。我将如何去做

trans by 2020-07-05T13:07:18Z

转到功能图

我有定义功能的Go程序。 我也有一个地图,每个功能都应该有一个键。 我怎样才能做到这一点?

我已经尝试过了,但这是行不通的。

func a(param string) {

}

m := map[string] func {
    'a_func': a,
}

for key, value := range m {
   if key == 'a_func' {
    value(param) 
   }
}
trans by 2020-06-30T05:44:58Z

map-YAML:带有空值的字典

如何在YAML中编写字典(地图),其中一个键的值为空字符串?

trans by 2020-06-17T03:34:51Z

C ++-使用++ op递增map <string,int>

我有一张地图来统计文件中单词的出现。我正在从文件中读取单词,每次读取单词时,我都想这样做:

map[word]++; //(where map is the name of my map, I'm not using map as a name of course)

因此,如果我的地图已经具有“单词”作为键,则将其递增,否则将创建新的键并将其递增。

这是我担心的地方:如果我在新键上执行map [word] ++(在读取的第一个单词中是不可避免的),我的程序会因为我的map中的int被统一化而崩溃吗?如果是这样,告诉地图的最有效方法是:如果单词已经存在,则在值上执行++,否则,创建值= 1的新键?在此处使用带有'map.find'的if语句似乎不必要地多余,您认为呢?

谢谢

trans by 2020-02-18T13:03:25Z

方法-JavaScript Array#map:索引参数

我的问题是关于JavaScript中的map数组方法。

您可以向它传递一个带有第二个参数的函数,该参数是正在处理的数组的当前元素的索引,但是……目的何在? 当您这样做时会发生什么,而当您不这样做时有什么区别呢?

您将使用此功能做什么?

trans by 2020-02-14T13:05:04Z

map-scala:如何将扩展列表作为varargs传递给方法?

在Scala中创建IndexedSeq时,我致电Map.apply,得到:

found   : scala.collection.mutable.IndexedSeq[(Int, Entity)]
required: (Int, Entity)

这是因为IndexedSeq的签名是:Map.apply,这需要一个varargs样式参数。

有没有一种方法可以转换IndexedSeq,以便可以通过Map.apply接受它?

trans by 2020-02-07T14:47:46Z

javascript-LeafletJS:如何删除缩放比例

我正在尝试删除LeafletJS地图上的缩放控件(+/-)。

我使用的是Leaflet的MapBox.js版本,但大多数操作与Leaflet相同。 我这样实现我的地图:

var map = L.mapbox.map('map');

var layer = L.mapbox.tileLayer('MAPBOX-ID', {
    format: 'jpg70',
    minZoom: 13,
    maxZoom: 15,
    reuseTiles: true, 
    unloadInvisibleTiles: true
});
map.addLayer(layer);
map.setView([40.73547,-73.987856]);

该文档说有一个zoomControl选项,它将从地图上删除缩放控件,但是我没有运气来工作。

如何通过此实现删除缩放控件?

谢谢!

trans by 2020-02-06T08:39:15Z

更改std :: map中元素键的最快方法是什么

我了解为什么不能做到这一点的原因(重新平衡和填充):

iterator i = m.find(33);

if (i != m.end())
  i->first = 22;

但是到目前为止(我知道)更改键的唯一方法是将所有节点从树上一起删除,然后使用另一个键将值插入回去:

iterator i = m.find(33);

if (i != m.end())
{
  value = i->second;
  m.erase(i);
  m[22] = value;
}

由于更多原因,这对我来说似乎效率很低:

  1. 遍历树三次(+平衡),而不是两次(+平衡)
  2. 价值的另一份不必要的副本
  3. 不必要的重新分配,然后在树内重新分配节点

我发现这三个分配和释放最差。 我是否缺少某些东西,或者有更有效的方法吗?

更新:我认为从理论上讲应该有可能,因此我认为更改其他数据结构是没有道理的。 这是我想到的伪算法:

  1. 在树中找到要更改其键的节点。
  2. 如果从树上分离(不要取消分配)
  3. 重新平衡
  4. 更改分离节点内的密钥
  5. 将节点插入树中
  6. 重新平衡
trans by 2020-01-31T06:51:56Z

如何在Java 8中映射值?

这个问题已经在这里有了答案:

  • 使用流,如何在HashMap中映射值?                                     3个答案

假设我有mapValues。是否有一种简单的方法可以从中获取Map<String, String>

简单来说,我的意思不是这样:

Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
    mapped.put(key, originalMap.get(key).toString());
}

但是有些像这样的班轮:

Map<String, String> mapped = originalMap.mapValues(v -> v.toString());

但显然没有方法mapValues

trans by 2020-01-28T10:21:51Z

java-将Map <String,Object>转换为Map <String,String>

如何将Map<String,Object>转换为Map<String,String>

这不起作用:

Map<String,Object> map = new HashMap<String,Object>(); //Object is containing String
Map<String,String> newMap =new HashMap<String,String>(map);
trans by 2020-01-25T20:29:44Z

C#到Java-词典?

用Java在字典中可以声明已经声明的项目吗? 就像下面的C#代码一样:

   Dictionary<string, int> d = new Dictionary<string, int>()
    {
        {"cat", 2},
        {"dog", 1},
        {"llama", 0},
        {"iguana", -1}
    };

我该怎么办?我要使用哪种类型? 我读过字典已过时。

trans by 2020-01-20T16:22:33Z

指针-C ++在地图中插入unique_ptr

我有一个unique_ptr类型的C ++对象

typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;

unique_ptr创建为Class1类型的新对象并将其插入ObjectArray类型的对象的语法是什么?

trans by 2020-01-17T06:07:21Z

java-根据地图键的子集过滤地图的元素,而无需遍历整个事物

我有Map<String, ArrayList>Set<String>。有没有一种方法可以将“映射”键与一组字符串“相交”,使得仅保留具有给定键的对,而无需遍历整个地图? 我主要关心的是性能,并重新发明可以更优雅地完成的工作。

trans by 2020-01-15T23:11:34Z

双向地图是否有更有效的实现?

我创建了一个简单的双向映射类,该类通过在内部存储两个map1实例(具有相反的键/值类型)并提供用户友好的界面来工作:

template<class T1, class T2> class Bimap
{
    std::map<T1, T2> map1;
    std::map<T2, T1> map2;
    // ...
};
  • 是否有一种更有效的方法来实现不需要两倍内存的双向映射?

  • 通常如何实现bimap?


编辑:

  • bimap元素应该是可变的还是不变的? (更改map1中的一个元素应该更改map2中的键,但是键是const,这是不可能的-解决方案是什么?)

  • 元素的所有权也是另一个问题:当用户在bimap中插入键值对时,bimap应该复制该键值对并将其存储,然后内部第二张图(键/值倒置) 不是复制而是指向原始对。 如何做到这一点?


编辑2:

我已经发布了我在Code Review上所做的可能的实现。

trans by 2020-01-07T03:09:45Z

您将使用哪种数据结构:TreeMap或HashMap? (Java)

这个问题已经在这里有了答案:

  • HashMap,LinkedHashMap和TreeMap之间的区别                                     16个答案

描述 一个Java程序,用于读取文本文件并按字母顺序打印每个唯一单词以及单词在文本中出现的次数。

程序应声明一个类型为\t\t\n]f.,!?:;\"()'的变量,以存储单词和相应的出现频率。 但是,哪种具体类型? TreeMap<String, Number>HashMap<String, Number>

输入应转换为小写。

单词不包含以下任何字符:\t\t\n]f.,!?:;\"()'

输出示例

 Word            Frequency
  a                 1
  and               5
  appearances       1
  as                1
         .
         .
         .

备注| 我知道,我已经在Perl中看到了用两行代码完成的优雅解决方案。 但是,我想在Java中看到它。

编辑:哦,是的,显示使用这些结构之一的实现(在Java中)会很有帮助。

trans by 2020-01-04T05:38:52Z

map-如何在Clojure中将字符的LazySeq转换为字符串?

假设我有一个java.lang.Character的LazySeq

(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)

如何将其转换为字符串? 我尝试了明显的

(String. my-char-seq)

但它抛出

java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]

我认为是因为String构造函数期望使用原始char []而不是LazySeq。 所以我尝试了类似

(String. (into-array my-char-seq))

但会引发相同的异常。 现在的问题是,入数组返回一个java.lang.Character []而不是原始char []。 这令人沮丧,因为我实际上生成了这样的字符序列

(map #(char (Integer. %)) seq-of-ascii-ints)

基本上,我有一系列表示ASCII字符的整数; 65 = A,等等。您可以看到我明确使用了原始类型强制功能(char x)。

这意味着我的地图函数返回的是原始char,而Clojure地图函数总体上返回的是java.lang.Character对象。

trans by 2020-01-02T12:29:12Z

如何在VIM中映射CAPS LOCK键?

我在Windows下使用VIM。并想要将CAPS LOCK映射到Ctrl ^

有什么办法吗?

顺便说一句,我在网上看到大量的示例如何使用注册表hack交换CAPS和Esc,但是它们都不使用VIM map命令,而是使用外部工具和注册表更改。

trans by 2020-01-01T23:24:19Z

函数式编程,Scala映射和折叠

左上角有哪些好的教程?

原始问题,已从删除中恢复以提供其他答案的上下文:

我正在尝试实现一种方法,用于找到矩形,圆形,位置以及全部扩展Shape的组的边界框。 组基本上是形状的数组

abstract class Shape  
case class Rectangle(width: Int, height: Int) extends Shape  
case class Location(x: Int, y: Int, shape: Shape) extends Shape  
case class Circle(radius: Int) extends Shape  
case class Group(shape: Shape*) extends Shape  

我得到了除第一组外的所有三个框的边界框。 因此,现在对于边界框方法,我知道我应该使用map并向左折叠Group,但是我只是无法找到创建它的确切语法。

object BoundingBox {  
  def boundingBox(s: Shape): Location = s match {  
    case Circle(c)=>   
      new Location(-c,-c,s)  
    case Rectangle(_, _) =>  
      new Location(0, 0, s)  
    case Location(x, y, shape) => {  
      val b = boundingBox(shape)  
      Location(x + b.x, y + b.y, b.shape)  
    }  
    case Group(shapes @ _*) =>  ( /: shapes) { } // i dont know how to proceed here.
  }
}

群组边界框基本上是所有形状都包含在内的最小边界框。

trans by 2019-12-30T01:06:14Z

在g中获取两个地图的并集

我有一个递归函数,用于创建表示文件路径的对象(键是路径,值是有关文件的信息)。 它是递归的,因为它仅用于处理文件,因此,如果遇到目录,则会在目录上递归调用该函数。

话虽这么说,我想在两个映射上做一个集合并集的等效操作(即用递归调用中的值更新的“主”映射)。 除了遍历一个映射并将每个键,其中的值分配给另一映射中的相同对象之外,是否有惯用的方法来做到这一点?

也就是说:假设a,b的类型为map [string] *SomeObject,并且最终填充了ab,是否可以用b中的所有值更新a

trans by 2019-12-28T03:57:15Z

1 2 3 4 下一页 共4页