小编Sim*_*Var的帖子

生成集合的排列(最有效)

我想生成一个集合(集合)的所有排列,如下所示:

Collection: 1, 2, 3
Permutations: {1, 2, 3}
              {1, 3, 2}
              {2, 1, 3}
              {2, 3, 1}
              {3, 1, 2}
              {3, 2, 1}
Run Code Online (Sandbox Code Playgroud)

一般而言,这不是"如何"的问题,而是关于如何最有效的问题.此外,我不想生成所有排列并返回它们,但一次只生成一个排列,并且只在必要时继续(很像迭代器 - 我也尝试过,但结果却少了有效).

我已经测试了很多算法和方法,并提出了这个代码,这是我尝试过的最有效的代码:

public static bool NextPermutation<T>(T[] elements) where T : IComparable<T>
{
    // More efficient to have a variable instead of accessing a property
    var count = elements.Length;

    // Indicates whether this is the last lexicographic permutation
    var done = true;

    // Go through the array from last to first
    for (var i = …
Run Code Online (Sandbox Code Playgroud)

c# algorithm optimization performance permutation

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

InAppPurchase验证和用于游戏逻辑的独立服务器

我正在使用Unity(适用于Android和iOS)开发应用程序.我正在使用SOOMLA插件允许用户通过In App Purchase购买Gems(虚拟货币).

用户和Gems以及所有其他游戏逻辑都通过Azure上的服务器.

我希望以下过程以某种方式作为单个事务发生:

  1. 用户通过IAP购买Gems
  2. 应用程序通知服务器
  3. 服务器验证购买和更新数据

但是如果互联网连接在步骤1和步骤2之间发生故障 - 用户付钱给他没有收到的宝石(不好!)

所以我目前的做法是这样的:

  1. 用户启动购买
  2. 应用程序通知服务器
  3. 服务器盲目地相应地更新数据
  4. 用户通过IAP购买Gems
  5. 如果取消购买,请通知服务器将其撤消

这样,用户可以保证购买他购买的宝石,但我不能保证得到报酬(不是很好......)

注意: 我不想在商店本身管理用户Gems.我希望我自己的服务器上的一切.所以SOOMLA的平衡对我来说毫无意义.我不在乎.

我想也许应用程序可以将购买数据存储在持久存储中,直到它设法通知服务器有关它,然后删除它.但我也认为这可能是一个糟糕的解决方案.因此这个问题.


我认为最好的解决方案可以正确处理这种情况:

  1. 用户通过IAP购买Gems
  2. IAP成功
  3. 互联网崩溃
  4. 我的服务器没有得到通知
  5. 用户从他的设备上卸载应用程序
  6. 然后,用户可以在其他设备上安装该应用:

    • 无论是他被指控还是他通过一些魔法得到了宝石
    • 或者他被自动退款,因为没有收到宝石

到目前为止,似乎无论如何这都是不可能的,这让我对IAP的技术感到失望.希望找到能证明我错误的答案.


似乎我所需要的只是能够从我的服务器获取用户的购买历史记录,并向Google Play或Apple Store提供安全请求.但这不是框架的一部分.


那么其他人在做什么?什么是最好的方法?

android in-app-purchase ios in-app-billing soomla

21
推荐指数
2
解决办法
1822
查看次数

如何在c#中使用谷歌语音识别api?

我想从c#获取音频文件并发送到谷歌语音识别API以获得"语音到文本"的答案.

我的代码是这样的:

try
{                
    byte[] BA_AudioFile = GetFile(filename);              
    HttpWebRequest _HWR_SpeechToText = null;
    _HWR_SpeechToText =
                (HttpWebRequest)HttpWebRequest.Create(
                    "https://www.google.com/speech-api/v2/recognize?output=json&lang=" + DEFAULT_LANGUAGE + "&key=" + key);
    _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials;
    _HWR_SpeechToText.Method = "POST";
    _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100";
    _HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
    Stream stream = _HWR_SpeechToText.GetRequestStream();
    stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
    stream.Close();

    HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();
    if (HWR_Response.StatusCode == HttpStatusCode.OK)
    {
        StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
        Console.WriteLine(SR_Response.ToString());
    }

}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)

这部分用于上传file.wav并获取google API的响应,我从Internet上找到了该API.

但我的代码总是捕获异常:

在调用_HWR_SpeechToText.GetResponse()之前,必须将内容长度字节写入请求流.但我已经写过ContextLength了.

所以我的问题是为什么我的程序失败了?这是因为谷歌链接或我不恰当使用的HTTPWebRequest?

这是我获得API密钥的正确位置吗?

在此输入图像描述

c# speech-recognition

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

注册已使用的热键

背景:

我想Ctrl+Alt+Left全局听一个热键序列(),所以我正在使用:

[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
Run Code Online (Sandbox Code Playgroud)

这与许多其他热键,如伟大工程Ctrl+Alt+PageUp,Ctrl+Alt+PageDown等等......但随着出现问题Ctrl+Alt+Left,具体.


问题:

在一台计算机上,它工作得很好,就像任何其他热键序列一样,但在另一台Ctrl+Alt+Arrow用于旋转屏幕的计算机上,它无法注册热键(即返回零并且没有得到回调到窗口的处理).

MSDN说:如果为热键指定的击键已经被另一个热键注册,则RegisterHotKey失败.

我希望无论如何都可以注册该热键序列,如果需要,可以覆盖它.我当然希望屏幕保持不旋转状态,至少在我的程序运行时.

更改热键序列实际上不是一个选项,因为其他计算机可能还有其他可能导致故障的热键序列.


问题:

Ctrl+Alt+Left作为屏幕旋转热键和Ctrl+S保存热键有什么区别,导致一个失败而另一个失败?(也许是因为一个是全球热键,第二个是上下文?)

是否可以完全覆盖热键?这是一个好主意吗?

最重要的是,我如何确保我的热键将被注册?

c# hook registerhotkey

6
推荐指数
1
解决办法
2607
查看次数

用法?? 在Nullable <int>和string之间

查看??它所说的定义,如果它不是null或右操作数,则返回左操作数.但为什么这不起作用?

int? i = null;
string s = i ?? "some string";
Run Code Online (Sandbox Code Playgroud)

是否要求可空类型匹配正确的操作数类型?

c# nullable

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

在屏幕上自动点击鼠标

我正在寻找一种创建程序的方法,该程序将在屏幕上找到某种颜色时执行鼠标单击.

例如,如果屏幕上有一个红色框,我希望程序点击它中心的红色框.

我怎样才能在C#中实现这一目标?

.net c# windows automation

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

string.Replace不能处理Unicode字符"â〜..."

我正在尝试转换以下字符串:

★ Bayonet | Slaughter (Minimal Wear)
Run Code Online (Sandbox Code Playgroud)

简单地说:

Bayonet | Slaughter (Minimal Wear)
Run Code Online (Sandbox Code Playgroud)

为此,我尝试使用以下内容:(名称是包含上述内容的字符串)

name = name.Replace("★ ", "");
Run Code Online (Sandbox Code Playgroud)

但是,字符串保持不变.我正在使用JSON响应检索字符串,该响应似乎表明使用以下序列创建了奇怪的文本(星号):

\u2605 
Run Code Online (Sandbox Code Playgroud)

但是,字符串似乎会自动转换为帖子顶部的奇怪字符串.那么为什么name.replace函数无法替换这些字符呢?

c# string

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

如何在没有循环的情况下将具有值数组的键数组连接到字典?

我有一组键和值,我想从中创建一个字典:

var keys = new string[] { "Key1", "Key2" };
var values = new string[] { "Bob", "Tim" };
Run Code Online (Sandbox Code Playgroud)

必要的方法是:

var dictionary = new Dictionary<string, string>();
for(int i = 0; i < keys.Length; i++) {
  dictionary.Add(keys[i], values[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果没有循环,我该怎么做?可能和Linq一起?我看过Array.Join,但在这种情况下无法弄清楚如何使它适用于我.

c# linq

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

是"这个"作为参考的参考?

我正在Xna中开发一个关卡编辑器,我的问题是,当你使用"this"作为参数调用方法时,参数或值是参数吗?

例如:

class A_Class
{
    private B_Class bClass;

    public void aMethod()
    {
        bClass.bMethod(this);
    }
}

class B_Class
{
    public void bMethod(A_Class aClass)
    {
        // code
    }
}
Run Code Online (Sandbox Code Playgroud)

c# xna reference

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

从子控件移动到父级父级时,MouseLeave不会触发

我有一个UserControl,它可以监听它自己的MouseLeave,以便改变它的背景颜色和一些儿童的可见性.应该失去知名度的孩子,也要听自己的MouseLeave以改变他们的背景颜色.

一切正常的场景是这样的:

  1. 将鼠标移动到UserControl.
  2. 将鼠标移动到Child.
  3. 将鼠标移出Child进入UserControl.

有问题的情况是这样的:

  1. 将鼠标移动到UserControl.
  2. 将鼠标移动到Child.
  3. 将鼠标移出Child,而不是移入UserControl,但直接移到UserControl之外.

这种情况一直发生,因为Child位于UserControl的最边缘.请注意,不仅UserControl的MouseLeave不会触发,而且Child的MouseLeave也不会触发.

为了确定在这种情况下鼠标是否实际上已离开该区域,我必须听其他控件的MouseEnter,然后通知UserControl和Child,但我真的想避免这个解决方案,因为它很难看而不是OOPish .

此外,Child必须位于UserControl的最边缘,并且无法移动.

谁能想到这个问题的巧妙解决方案?

c# user-controls winforms

0
推荐指数
1
解决办法
3096
查看次数

循环和条件C#

我遇到一些看起来很简单的问题.我正在使用条件和预测试循环虽然它似乎甚至没有执行一个,因为满足条件,但它们不是.

我有,但我似乎永远不会遇到/当我打破它.它只是跳过它

int sorter = random.Next(0, 10);
bool player1full = false;
bool player2full = false;

while (player1full && player2full == false)
{
    if (chuckcards[sorter] != null)
    {
         while (player1full != true)
         {
              if (player1.Count != 5)
              {
                   player1.Enqueue(chuckcards[sorter]);
                   chuckcards[sorter] = null;
              }
              else
              {
                   player1full = true;
              }

              sorter = random.Next(0, 10);
         }

         while (player2full != true)
         {
              if (chuckcards[sorter] != null)
              {
                   if (player2.Count != 5)
                   {
                        player2.Enqueue(chuckcards[sorter]);
                        chuckcards[sorter] = null;
                   }
                   else
                   {
                        player2full = true;
                   }

                   sorter …
Run Code Online (Sandbox Code Playgroud)

c# while-loop

0
推荐指数
1
解决办法
242
查看次数